簡述 JPA 與 Spring Data JPA 與 Hibernate

1.JPA是什麼?以及相關概述

  • 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是什麼?以及相關概述

  • 首先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 註解能夠實現的)的方法,不用重寫。
對於須要判斷並拼接查詢條件的方法,咱們能夠在實現類中進行重寫。
示例代碼以下:html

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集合...
}
  • jar包結構以下圖:
    java

  • 關於spring-data-jpa的使用可參考:https://www.cnblogs.com/dreamroute/p/5173896.htmlspring

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霸佔了,可怕。
sql

本文參考:http://www.lxway.com/528201191.htm
https://www.cnblogs.com/dreamroute/p/5173896.html
http://www.cnblogs.com/xiaoheike/p/5150553.html
https://baike.baidu.com/item/JPA/5660672?fr=aladdinmongodb

相關文章
相關標籤/搜索