1. 程式人生 > >簡述 JPA 與 Spring Data JPA 與 Hibernate

簡述 JPA 與 Spring Data JPA 與 Hibernate

避免 down 應用開發 -m 面向 pda _id 簡寫 append

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 註解可以實現的)的方法,不用重寫。
對於需要判斷並拼接查詢條件的方法,我們可以在實現類中進行重寫。
示例代碼如下:

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包結構如下圖:
    技術分享圖片

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

3.總結

  • JPA是一套規範,Hibernate框架做了較好的實現。
  • Spring框架獨攬了repository的實現,即CRUD相關操作,即 Spring Data JPA
  • JPA 對實體(xxxEO)操作,使其與數據庫關聯。
  • 下面2圖展示了JPA 與 ORM框架關系,以及 Spring Data JPA做了什麽
    技術分享圖片
    技術分享圖片

本文參考: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=aladdin

簡述 JPA 與 Spring Data JPA 與 Hibernate