简述 JPA 与 Spring Data JPA 与 Hibernate

###1.JPA是什么?以及相关概述html

  • JPA的是 Java Persistence API 的简写,是Sun官方提出的一种ORM规范!
  • Sun提出此规范有2个缘由: 1.简化现有Java EE和Java SE应用开发工做。 2.Sun但愿整合ORM技术,实现天下归一。
  • 重点在于,JPA是一套规范,而不是具体的ORM框架。
  • 故Hibernate、TopLink 等ORM框架 都是JPA的实现,其中Hibernate已得到Sun的兼容认证。
  • JPA的标准的定制是hibernate做者参与定制的,因此JPA是Hibernate的一个总成。
  • 优点在于: 1.开发者面向JPA规范的接口,但底层的JPA实现能够任意切换:以为Hibernate好的,能够选择Hibernate JPA实现;以为TopLink好的,能够选择TopLink JPA实现。 2.这样开发者能够避免为使用Hibernate学习一套ORM框架,为使用TopLink又要再学习一套ORM框架。
  • 在项目中使用方式为:在实体类中,使用 @Entity@Table@Id@Column 等注解。
  • 示例代码以下:
import javax.persistence.*;
import javax.persistence.Id;

@Entity
@Table(name = "t_user")//数据库中表名
public class UserEO {
    @Id
    @Column(name = "USER_ID")//数据库中字段名
    private String userId;

    @Column(name = "USER_NAME")
    private String  userName;
   
}
  • jar包结构以下图所示:

###2.Spring Data JPA是什么?以及相关概述java

  • 首先Spring框架几乎是无所不能,无所不在。
  • 其次Spring也想要作持久化相关工做,而且已有Spring-data-**这一系列包(Spring-data-jpa,Spring-data-template,Spring-data-mongodb等)。
  • 其中Spring-data-jpa即表明着,Spring框架对JPA的整合。
  • Spring Data JPA是在JPA规范的基础下提供了Repository层的实现。
  • 在项目中的repository层中具体表现为: 1.接口要继承JpaRepository接口,示例代码以下:
@Repository
public interface UserRepository extends JpaRepository<UserEO,String>{//第二个参数是UserEO对应的表的主键类型

    //直接定义以下方法,不须要写具体的sql语句
   List<UserEO> findByUserName(String userName);

    //对于自定义操做(好比更新状态字段为 ‘1’)使用 @Query注解
    @Query("update UserEO u set u.status = '1' where u.userName = :userName    
    void updateStatusByName(String userName);


    //此方法 须要拼接条件  在实现类中重写
     List<UserEO> findByUserName(Condition condition);

}

2.实现类无需显式实现 UserRepository,只要命名为UserRepositoryImpl便可。 好处在于对于不须要写sql或者sql语句不复杂(使用 @Query 注解能够实现的)的方法,不用重写。 对于须要判断并拼接查询条件的方法,咱们能够在实现类中进行重写。 示例代码以下:spring

public  List<UserEO> findByUserName(Condition condition) {
    StringBuilder jpql = new StringBuilder(" select u from userEO u where u.tatus = '1'  " );

    if (StringUtils.hasText(conditon.getUserName)) {
            jpql.append(" and u.userName = :userName " );  
     }
    //执行 sql .. 返回List集合...
}

###3.总结数据库

  • JPA是一套规范,Hibernate框架作了较好的实现。
  • Spring框架独揽了repository的实现,即CRUD相关操做,即 Spring Data JPA
  • JPA 对实体(xxxEO)操做,使其与数据库关联。
  • 下面2图展现了JPA 与 ORM框架关系,以及 Spring Data JPA作了什么

####不知道为何,忽然就想更新下!2018年2月27日~ 从maven仓库搜索 'jpa' 的结果(下图)能够看到,JPA的非repository部分已经被Hibernate霸占了,可怕。 app

本文参考:http://www.lxway.com/528201191.htm http://www.javashuo.com/article/p-qxjwoiuy-gq.html http://www.cnblogs.com/xiaoheike/p/5150553.html https://baike.baidu.com/item/JPA/5660672?fr=aladdin框架

相关文章
相关标签/搜索