簡述 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框架

相關文章
相關標籤/搜索