1. 程式人生 > >spring data jpa 與 jpa的區別

spring data jpa 與 jpa的區別

spring data jpa 與 jpa的區別 - sinat_39789638的部落格 - CSDN部落格
https://blog.csdn.net/sinat_39789638/article/details/78045990

 

spring data jpa是spring公司下的spring data專案的一個模組。 
spring data jpa定義了介面來進行持久層的編寫規範,同時還大大簡化了持久層的CRUD操作。 
從此可以看出,spring data jpa與jpa之間並沒有直接的關係。 
jpa是由sun公司定義的持久層規範,但是jpa 並沒有做任何簡化,其中只有一堆介面。 
而spring data jpa中不僅有介面,還有實現類,正是這些實現類實現了CRUD操作的簡化,但是實現類並不做CRUD操作。 
spring data jpa和jpa一樣,雖然定義了持久層的編寫規範,但是持久層的具體操作需要由第三方框架來做,它自己並不能做相應的CRUD操作。

簡而言之,spring data jpa和jpa的區別: 
1、spring data jpa由spring提供 jpa由sun公司提供 
2、兩者屬於同一等級,都是持久層的規範,spring data jpa對CRUD操作做了簡化 
兩者都可以管理任何第三方持久層框架。是同一級別的。

 

 

 

 

 

===========================================================================

===========================================================================

===========================================================================

 

 

簡述 JPA 與 Spring Data JPA 與 Hibernate - kangkaii - 部落格園
https://www.cnblogs.com/kangkaii/p/8458371.html

 

 

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

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做了什麼

不知道為什麼,突然就想更新下!2018年2月27日~

從maven倉庫搜尋 'jpa' 的結果(下圖)可以看到,JPA的非repository部分已經被Hibernate霸佔了,可怕。

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