《Spring Data JPA從入門到精通》 and《Spring Data JPA 實戰》 張振華.Jack --我的書
《Spring Data JPA從入門到精通》購買地址:
本書初衷
隨著Java技術和微服務技術逐漸廣泛應用,Spring Cloud、Spring Boot逐漸統一Java的框架江湖。市場上的ORM框架也逐漸被人重視起來。Spring Data逐漸走入Java開發者的視野,被很多架構師作為ORM框架的技術選型。市場上沒有對Spring Data JPA的完整介紹。資料比較零散,很難一下子全面、深入地掌握Spring Data JPA。本書注重從實際出發來提高從事Java開發者的工作效率,可以作為一本很好的自我學習手冊和Spring Data JPA的查閱手冊。“不僅授之以魚,還授之以漁”,不僅告訴大家是什麼、怎麼用,還告訴大家學習步驟、怎麼學習,以及原理、使用技巧與實踐。全書以Spring Boot為技術基礎,從入門到精通,由淺入深地介紹和使用Spring Data JPA,很適合Java的初學者從此彎道超車,走上Spring全家桶學習的快車道。
“未來已經來臨,只是尚未流行”
縱觀市場上的ORM框架,MyBitas以靈活著稱,但是要維護複雜的配置,並且不是Spring官方的天然全家桶,還得做額外的配置工作,即使是資深的架構師也得做很多封裝;Hibernate以HQL和關係對映著稱,但是使用起來不是特別靈活。這樣Spring Data JPA來了,感覺要奪取ORM的JPA霸主地位了,它底層以Hibernate為封裝,對外提供了超級靈活的使用介面,又非常符合面向物件和REST的風格,越來越多的API層面的封裝都是以Spring Data JPA為基礎的,感覺是架構師和開發者的福音。Spring Data JPA與Spring Boot配合起來使用具有天然的優勢,你會發現越來越多的公司招聘會由傳統的SSH、Spring、MyBitas技術要求逐步地變為Spring Boot、Spring Cloud、Spring Data等Spring 全家桶技術的要求。
追本溯源
架構師在架構設計系統之前都要先設計各種業務模型、資料模型,其實在眾多技術框架中,要掌握Spring Boot、Spring MVC、Spring Cloud、微服務架構等,都離不開底層資料庫操作層,如果我們能很好地掌握Data這層的技術要領,從下往上學習,這樣可能會更好掌握一些。
本書特色
(1)本書針對Java開發者、Spring的使用者,是Spring Data JPA開發必備書籍。
(2)本書從介紹到使用再到原理和實踐,可以作為一本很好的Spring Data JPA的實戰手冊。
(3)本書的程式碼清晰,迭代完整,便於全面、完整地掌握和學習JPA。
(4)本書注重從實戰經驗方面進行講解,非常實用,一點即破。
(5)本書原型PPT深受同事喜愛,並在企業內部培訓的時候得到了很多Java程式設計師的肯定。
閱讀指南
本書以Spring Boot為開發基礎和線索,大量採用了UML釋義的講解方式。本書分為3個部分,共12章。
(1)基礎部分:整體認識JPA、JPA基礎查詢方法、定義查詢方法、註解式查詢方法、@Entity例項裡面常用註解詳解,瞭解Spring Data JPA的基本使用和語法。
(2)晉級之高階部分:JpaRepository詳解、JPA的MVC擴充套件Rest支援、DataSource的配置、樂觀鎖等,瞭解其背後的實現動機及其原理。
(3)延展部分:SpEL表示式在Spring Data裡面的應用、Spring Data Redis實現cacheable的實踐、IntelliJ IDEA加快開發效率、Spring Data Rest的介紹,直至整個Spring Data的生態。
另外,由於Spring Boot 2.0的版本Spring Data JPA有了一些變化,作者對Spring Boot 2.0中的JPA
行業大神精彩書評
Spring Data 在國內是一個嚴重被低估的技術,自然相關的討論也淡出大家的視野,開發人員更習慣於使用 MyBatis 或者 Hibernate 等 ORM 框架來操作關係型資料,卻忽略 NoSQL 的整合,然而 Spring Data 的出現彌補了這個方面的遺憾。本書雖名為 Spring Data JPA,可是也為讀者深入介紹 Spring Data 抽象設計以及擴充套件。通過案例分析和實現原理,幫助開發人員瞭解 Spring Data 的全貌,更為重要是讓讀者理解 JPA 規範的重要性。
--------------------------- 小馬哥(馬昕曦),阿里巴巴技術專家
Spring Data進一步簡化了Java訪問SQL和NoSQL資料來源的複雜度。本書詳細介紹了Spring Data JPA框架的知識,是一本很好的學習參考書籍。
----Mongodb官方團隊《Mongodb實戰》第2版譯者 徐雷
本書從淺入深,從原理剖析到經驗結合,直觀的把 spring data jpa 和周邊功能展現給了讀者,相信從 java 初學者到經驗老道的架構師讀此書都能有所收穫。
--------------------------- 資深java老兵 林曉輝
Spring發展到現在已經是Java應用開發畢本的基礎設施了,而且遵循它一貫的風格,孵化出一系列優秀的解決方案,如Spring Boot、Spring Data、Spring Cloud等,每一個解決方案都完全遵循了Spring的設計理念;
Spring Data Jpa在開發企業級應用時有其獨特的優勢,能幫助開發人員快速的進行各種資料庫到Java模型的對映,幫我們進行快速的業務邏輯開發,而無需關心資料對映的一些細節。
我也曾經使用Spring Data Jpa開發過一個JavaEE專案開發腳手架ES專案,使用Spring Data Jpa能快速的幫助我完成專案DAO層的開發。強烈推薦大家在開發企業級應用時使用Spring Data,本書能讓讀者從入門到靈活運用,值得一讀。
-------------------《億級流量網站架構核心技術》書作者 張開濤
作為一個Java老程式設計師,2000年開始接觸Java,2003年開始用Struts + MySQL做Java Web開發。剛開始的時候直接用JDBC訪問資料庫,影響比較深刻的是當時有大量的時間花在寫SQL和處理結果集上。那個時候資料庫設計是程式設計的很重要部分,一般都是先做資料庫設計(例如用Power Designer做ER模型),然後再寫程式。資料庫設計除了表的設計之外,還會涉及到檢視,觸發器和儲存過程等。到了2004年,Hibernate 1.0橫空出世,當時身邊有個大神同學(尹俊,目前就職於美國Google)花了一個月時間通讀了文件和原始碼,給大家做了講解,大家討論之後決定將Hibernate引入到專案中,吃一下螃蟹。從此我就開始和ORM打起了交道。
ORM最大的好處就是讓程式設計師關注在業務本身以及對應OO(面向物件)程式設計,這個更加契合領域設計和OO設計,而不是一開始陷入到資料庫細節層面,影響總體設計。學過領域設計的同學都知道里面有關於Entity,Repository,Service等相關的概念,而JPA則很好的實現了這些概念。Spring Data JPA出現之後,則更加簡化了我們訪問資料庫的方式。你只要花費1分鐘,定義一個實體類(加上Entity註解)和擴充套件一個CrudRepository的介面,就可以具備對單表CRUD操作的基本功能。
在2016的一個實際專案中,我們在Spring Data JPA的基礎上,實現了很多功能,例如欄位自動加解祕,欄位JSON與POJO自動對映,歷史表(審計功能),自動設定建立時間/更新時間,樂觀鎖/悲觀鎖等,收穫頗多。
雖然經常使用Spring Data JPA,但是基本上都是遇到問題現查文件,缺少一本提綱挈領,循序漸進完整講解Spring Data JPA的書。而振華老弟年紀不大,卻很愛專研技術,算得上是Spring Data JPA的專家,而他寫的這本書正好滿足了我以及廣大Java程式設計師的需求,學習Spring Data JPA不在枯燥,同時非常翔實,完整的講解了Spring Data JPA,並配合大量例項,兼具參考書和實戰指南,值得廣大讀者仔細研讀。
-----------------------王天青 DaoCloud首席架構師
Spring Data Jpa是一個非常出色的資料訪問封裝,可以極大的簡化開發人員對資料庫的操作編碼,但是該框架在國內的應用並不多,主要由於該框架對於初學者來說的確簡化了資料訪問的開發,但是由於隔離了很多訪問細節,對於各種複雜的查詢如何使用會有一些學習成本,同時對於效能的把握也需要更深入的瞭解其底層原理才能真正的用好它。本書細緻的介紹了Spring Data Jpa在各種場景下的使用方式,因此推薦給對此感興趣的讀者們。
-------------------翟永超、《Spring Cloud微服務實戰》作者、spring4all.com發起人
目錄:
第一部分 基礎部分
第1章 整體認識JPA3
1.1 市場上ORM框架比對3
1.2 JPA的介紹以及哪些開源實現4
1.3 瞭解Spring Data5
1.3.1 Spring Data介紹5
1.3.2 Spring Data的子專案有哪些:5
1.3.3 Spring Data操作的主要特性6
1.4 Spring Data Jpa的主要的類及結構圖7
1.5 Mysql的快速開始例項8
第2章 Jpa基礎查詢方法13
2.1 Spring Data Common的Repository14
2.2 Repository的類層次關係 (diagms/hierarchy/structure)14
2.3 CrudRepository方法詳解17
2.3.1 CrudRepository interface內容17
2.3.2 CrudRepository interface的使用案例18
2.4 PagingAndSortingRepository方法詳解19
2.4.1 PagingAndSortingRepository interface 內容20
2.4.2 PagingAndSortingRepository使用案例20
2.5 JpaRepository方法詳解21
2.5.1 JpaRepository詳解21
2.5.2 JpaRepository使用方法也一樣,只需要繼承它即可。如下面的例子:22
2.6 Repository的實現類SimpleJpaRepository22
第3章 定義查詢方法 (Defining Query Methods)24
3.1 定義查詢方法的配置方法24
3.2 方法的查詢策略設定25
3.3 查詢方法的建立26
3.4 關鍵字列表27
3.5 方法的查詢策略的屬性表示式 (Property Expressions)29
3.6 查詢結果的處理29
3.6.1 引數選擇(Sort/Pageable)分頁和排序29
3.6.2 查詢結果的不同形式(List/Stream/Page/Future)30
3.6.3 Projections對查詢結果的擴充套件31
3.7 0實現機制介紹34
第4章 註解式查詢方法36
4.1 @Query詳解36
4.1.1 先看一下語法及其原始碼:36
4.1.2 @Query用法37
4.1.3 @Query的排序38
4.1.4 @Query的分頁39
4.2 @Param用法39
4.3 Spel表示式的支援40
4.4 @Modifying修改查詢41
4.5 @QueryHints42
4.6 @Procedure儲存過程的查詢方法43
4.7 @NamedQueries預定義查詢45
4.7.1 這種是預定義查詢的一種形式。45
4.7.2 用法舉例:45
4.7.3 @NamedQuery和@Query、方法定義查詢三者對比。46
第5章 @Entity例項裡面常用註解詳解47
5.1 javax.persistence概況介紹47
5.2 基本註解 @Entity、@Table、@Id、@GeneratedValue、@Basic、@Column、@Transient、@Lob、@Temporal50
5.2.1 先看一個Blog的案例其中實體的配置如下:50
5.2.2 @Entity 定義物件將會成為被JPA管理的實體,將對映到指定的資料庫表。51
5.2.3 @Table 指定資料庫的表名51
5.2.4 @Id 定義屬性為資料庫的主鍵,一個實體裡面必須有一個。51
5.2.5 @IdClass 利用外部類的聯合主鍵。51
5.2.6 @GeneratedValue主鍵生成策略53
5.2.7 @Basic 表示屬性是到資料庫表的欄位的對映。如果實體的欄位上沒有任何註解,預設即為@Basic。53
5.2.8 @Transient 表示該屬性並非一個到資料庫表的欄位的對映,表示非持久化屬性。JPA對映資料庫的時候忽略它。與@Basic相反的作用。53
5.2.9 @Column 定義該屬性對應資料庫中的列名。53
5.2.10 @Temporal 用來設定Date型別的屬性對映到對應精度的欄位。54
5.2.11 @Enumerated這個註解很好用,直接對映enum列舉型別的欄位。54
5.2.11 @Lob 將屬性對映成資料庫支援的大物件型別。支援以下兩種資料庫型別的欄位。55
5.2.12 @SqlResultSetMapping @EntityResult @ColumnResult 配合@NamedNativeQuery一起使用的。實際工作中不建議這樣配置。55
5.3 關聯關係註解 @OneToOne、@JoinColumn、@ManyToOne、@ManyToMany、@JoinTable、@OrderBy56
5.3.1 @JoinColumn 定義外來鍵關聯的欄位名稱56
5.3.2 @OneToOne 一對一關聯關係56
5.3.3 @OneToMany一對多&@ManyToOne多對一58
5.3.4 @OrderBy關聯查詢的時候的排序58
5.3.5 @JoinTable關聯關係表59
5.3.6 @ManyToMany多對多60
5.4 Left join與Inner join與@EntityGraph61
5.4.1 Left join&Inner join問題61
5.4.2 @EntityGraph62
5.5 工作中關於關係查詢踩過的那些坑62
第二部分 晉級之高階部分
第6章 JpaRepository擴充套件詳解66
6.1 JpaRepository介紹66
6.2 QueryByExampleExecutor的使用67
6.2.1 QueryByExampleExecutor詳細配置67
6.2.2 QueryByExampleExecutor的使用案例68
6.2.3 QueryByExampleExecutor的特點及約束69
6.2.4 ExampleMatcher詳解:69
6.2.5 QueryByExampleExecutor使用場景&實際的使用71
6.2.6 QueryByExampleExecutor的原理74
6.3 JpaSpecificationExecutor的詳細使用75
6.3.1 JpaSpecificationExecutor的使用方法75
6.3.2 Criteria的概念簡單介紹76
6.3.3 JpaSpecificationExecutor案例77
6.3.4 Specification工作中的一些擴充套件79
6.3.5 JpaSpecificationExecutor實現原理80
6.4 自定義Repository81
6.4.1 EntityManager介紹81
6.4.2 自定義實現Repository83
6.4.3 實際工作的應用場景84
第7章 Spring Data Jpa的擴充套件87
7.1 Auditing及其事件詳解87
7.1.1 Auditing如何配置88
7.2.2 @MappedSuperclass90
7.1.3 Auditing原理解析91
7.1.4 Listener事件的擴充套件93
7.2 @Version處理樂觀鎖的問題94
7.3 對MvcWeb的支援97
7.3.1 @EnableSpringDataWebSupport97
7.3.2 DomainClassConverter元件97
7.3.3 HandlerMethodArgumentResolvers可分頁和排序98
7.3.4 @PageableDefault 改變預設的page和size。100
7.3.5 Page原理解析:100
7.4 @EnableJpaRepositories詳解102
7.4.1 Spring Data Jpa載入repositories配置簡介102
7.4.2 @EnableJpaRepositories詳解103
7.4.3 JpaRepositoriesAutoConfiguration原始碼解析105
7.5 預設日誌簡單介紹106
7.6 Spring Boot Jpa的版本問題109
第8章 DataSource的配置111
8.1 預設資料來源的講解111
8.1.1 我們通過三種方法來檢視我們預設的DataSource是什麼。111
8.1.2 我們看來下我們的datasource和jpa都有哪些配置屬性。114
8.1.3 JpaBaseConfiguration116
8.1.4 Configuration思路117
8.2 AliDruidDataSource的配置118
8.3 事務的處理及其講解121
8.3.1 預設@Transactional註解式事務121
8.3.2 宣告式事務,又叫隱式事務,或者叫ASPECTJ事務125
8.4 如何配置多資料來源126
8.4.1 在application.properties中定義兩個DataSource126
8.4.2 定義兩個DataSourceConfigJava類127
8.5 Naming命名策略詳解及其實踐129
8.5.1 Naming命名策略詳解130
8.5.2 實際工作中的一些擴充套件132
8.6 完整的傳統xml的配置方法133
第三部分 延展部分
第9章 Intellij Idea與Spring Jpa138
9.1 Intellij Idea的大概介紹138
9.2 DataBase外掛139
9.3 Persistence及其JPA相關的外掛介紹143
9.4 Intellij Idea分析原始碼用到的幾個檢視148
第10章 Spring Data Redis詳解151
10.1 Redis 之 Jedis 的使用151
10.2 Spring Boot + spring data redis 配置158
10.3 Spring Data Redis結合Spring Cache 配置方法165
10.3.1 Spring Cache 介紹165
10.3.2 Spring Boot快速開始Demo169
10.3.3 Spring Boot Cache 實現過程解析170
10.3.3 Cache 和 Spring Data Redis 結合172
第11章 SpEL表示式講解182
11.1 SpEL介紹182
11.1.1 SpEL主要特點183
11.1.2 使用方法183
11.2 SpEL的基礎語法184
9.2.1 邏輯運算操作185
11.2.2 邏輯關係比較186
11.2.3 邏輯關係187
11.2.5 正則表示式的支援188
11.2.6 Bean的引用188
11.2.7 List 和 Map 的操作189
11.3 主要的幾個類介紹及其原理190
11.3.1 ExpressionParser190
11.3.2 root object191
11.3.3 EvaluationContext192
11.3.4 SpelParserConfiguration 編譯器配置192
11.3.5 表示式模板設定194
11.3.6 主要類關係圖195
11.3.7 SpEL支援以下的一些特性:195
11.4 在spring的主要使用場景196
11.4.1 Spring Data JPA中SpEL支援196
11.4.2 Spring Cachae197
11.4.3 @Value197
11.4.4 web 驗證應用場景198
11.4.5 總結198
第12章 Spring Data REST199
12.1 快速入門199
12.1.1 Spring Data Rest介紹199
12.1.2 快速開始201
12.1.3 Repository資源介面介紹208
12.2 Spring Data Rest定製化209
12.2.1 @RepositoryRestResource 改變***Repository對應的Path路徑和資源名字。209
12.2.2 @RestResource 改變SearchPath210
12.2.3 改變返回結果211
12.2.4 隱藏某些Repository,Repository的查詢方法或@Entity關係欄位212
12.2.5 隱藏Repository的CRUD方法212
12.2.6 自定義JSON輸出212
12.3 Spring Boot 2.0載入其原理213
12.4 未來發展214
《Spring Data JPA 實戰》
《Spring Data Jpa實戰》本內容是對作者之前學習和工作中Spring Data Jpa的實踐的總結和昇華。我經常給現在的開發人員常常講的一句話是:“你們現在是站在巨人的肩上,彎道超車”。因現在框架越來越優秀,避免我們之前的很多問題和工作量。如果你還沒有學習Spring Data Jpa建議趕快了解一下。隨著Java技術和微服務技術逐漸的廣泛的應用,Spring Cloud、Spring Boot逐漸統一Java的框架江湖。市場上的ORM框架也逐漸被人重視起來,而Spring Data逐漸走入Java開發者的視野,被越來越多的架構師作為ORM的技術選型方向。本課的內容分為三大部分:基礎和晉級、測試三個部分,全面的對Spring Data Jpa的使用,手冊,實戰,原始碼分析等進行講解。而基礎基礎部包括了:整體認識JPA,從Jpa基礎查詢方法出發、定義查詢方法(Defining Query Methods)、註解式查詢方法。並一步一步晉級之高階部分:@Entity例項裡面常用註解詳解、JpaRepository詳解、QueryByExampleExecutor和JpaSpecificationExecutor複雜使用案例和語法、Jpa的Mvc擴充套件Rest支援、DataSource原始碼分析(記憶體資料庫,多資料來源)、樂觀鎖等。測試部分包括:實際工作中測試用例的寫法。所選的技術版本:都是基於Spring boot 2.0來講解的,讓你提前走在大多人開發人員的前面。電子版的: