簡述 JPA 與 Spring Data JPA 與 Hibernate
阿新 • • 發佈:2018-02-22
避免 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