《Spring Data JPA从入门到精通》 and《Spring Data JPA 实战》 张振华.Jack --我的书

《Spring Data JPA从入门到精通》购买地址:

天猫: https://s.click.taobao.com/OsToiQw

当当:http://product.dangdang.com/1295191369.html

京东:https://item.jd.com/12350823.html

《Spring Data JPA从入门到精通》 and《Spring Data JPA 实战》 张振华.Jack --我的书

本书初衷

随着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发起人 

Spring Data是一个伟大的项目,它为数据访问提供了一致、相对简单的编程模型,并且可用来操作几乎所有的主流存储。
Spring Data JPA是Spring Data的核心子项目之一。本书由浅入深,讲解了Spring Data JPA的常用功能与API,并结合实际工作中的场景,讲解如何扩展、如何避免踩坑等。你,值得拥有。
-------------------——《Spring Cloud与Docker微服务架构实战》作者 周立

随着微服务的流行,Spring Boot 与 Spring Cloud被广泛使用。Spring Data JPA 简化数据库的操作,本书作者从最简单的开始到复杂应用,娓娓道来,填补相关领域空白。
-------------------一号店CTO 韩军/Jason

目录:

第一部分 基础部分
第1章  整体认识JPA 3
1.1  市场上ORM框架比对 3
1.2  JPA的介绍以及哪些开源实现 4
1.3  了解Spring Data 5
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的Repository 14
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的实现类SimpleJpaRepository 22
第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  @QueryHints 42
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、@Temporal 50
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、@OrderBy 56
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与@EntityGraph 61
5.4.1  Left join&Inner join问题 61
5.4.2  @EntityGraph 62
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  自定义Repository 81
6.4.1  EntityManager介绍 81
6.4.2  自定义实现Repository 83
6.4.3  实际工作的应用场景 84
第7章  Spring Data Jpa的扩展 87
7.1  Auditing及其事件详解 87
7.1.1  Auditing如何配置 88
7.2.2  @MappedSuperclass 90
7.1.3  Auditing原理解析 91
7.1.4  Listener事件的扩展 93
7.2  @Version处理乐观锁的问题 94
7.3  对MvcWeb的支持 97
7.3.1  @EnableSpringDataWebSupport 97
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  JpaBaseConfiguration 116
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中定义两个DataSource 126
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 Jpa 138
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快速开始Demo 169
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  ExpressionParser 190
11.3.2  root object 191
11.3.3  EvaluationContext 192
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 Cachae 197
11.4.3  @Value 197
11.4.4  web 验证应用场景 198
11.4.5  总结 198
第12章  Spring Data REST 199
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 改变SearchPath 210
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来讲解的,让你提前走在大多人开发人员的前面。

电子版的:

http://gitbook.cn/gitchat/column/5ab9bfd5c864031e9f8301bd