机械工业出版社旗舰店店铺主页二维码
机械工业出版社旗舰店 微信认证
微信扫描二维码,访问我们的微信店铺
你可以使用微信联系我们,随时随地的购物、客服咨询、查询订单和物流...

Spring Data JPA:入门、实战与进阶

87.70
运费: 免运费
Spring Data JPA:入门、实战与进阶 商品图0
Spring Data JPA:入门、实战与进阶 商品缩略图0

商品详情

书名:Spring Data JPA:入门、实战与进阶
定价:129.0
ISBN:9787111692201
作者:张振华
版次:1

内容提要:

本书主要分为四个模块,共33章。

模块一主要从基本语法的视角,来详细介绍 Spring Data JPA 的语法糖有哪些,包括源码的剖析、实际工作中的经验分享,以及作者对此的思考、启发。模块二从实际工作中的复杂应用场景开始,依次讲解自定义场景,如何扩展 Spring 给我们提供的框架、数据源、连接、事务之间的关系,帮助读者解决实践中可能会遇到的问题,并学会独立思考、稳妥解决。模块三讲解了实际工作遇到的经典问题,如 N+1 sql、lazy、事务的问题,及作者对此的思考和解决思路。模块四从 Spring Data Rest、Spring Data ES、测试用例的角度,扩展思路,展望一下发展方向。






目录:

前 言

第一部分 基础知识

第1章 初识Spring Data JPA  2

1.1 Spring Boot和JPA演示  2

1.2 JPA如何整合MySQL数据库  8

1.2.1 切换MySQL数据源  8

1.2.2 Spring Data JPA测试用例的写法  10

1.3 整体认识JPA  11

1.3.1 市场上ORM框架的对比  11

1.3.2 JPA简介和开源实现  12

1.4 认识Spring Data  13

1.4.1 Spring Data简介  13

1.4.2 Spring Data的子项目  14

1.5 本章小结  15

第2章 全面掌握Spring Data Commons之Repository  16

2.1 Spring Data Commons的依赖关系  16

2.2 Repository接口  17

2.2.1 查看Repository源码  17

2.2.2 Repository类层次关系  17

2.2.3 Repository接口的实际案例  19

2.3 CrudRepository接口  21

2.4 PagingAndSortingRepository接口  23

2.4.1 PagingAndSortingRepository的源码  23

2.4.2 PagingAndSortingRepository的使用案例  24

2.5 JpaRepository接口  25

2.6 Repository的实现类SimpleJpaRepository  26

2.7 Repository接口的启发  27

2.8 本章小结  28

第3章 定义查询方法的命名语法与参数  29

3.1 定义查询方法的配置和使用方法  29

3.1.1 直接通过方法名实现CRUD步骤  30

3.1.2 选择性暴露CRUD方法  30

3.2 方法的查询策略设置  31

3.3 定义查询方法的语法  32

3.3.1 语法剖析  32

3.3.2 关键源码  34

3.4 特定类型的参数:Sort和Pageable  36

3.5 限制查询结果:First和Top  38

3.6 @NonNull、@NonNullApi和@Nullable关键字  38

3.7 给我们的一些思考  39

3.8 本章小结  43

第4章 利用Repository中的方法返回值来解决实际问题  44

4.1 Repository的返回结果  44

4.1.1 自定义Streamable  46

4.1.2 返回结果类型List/Stream/Page/Slice  46

4.1.3 Repository对Feature/CompletableFuture异步返回结果的支持  52

4.1.4 对Reactive的支持:Flux与Mono  53

4.1.5 小结  53

4.2 最常见的DTO返回结果的支持方法  56

4.2.1 Projections概念  56

4.2.2 第一种方法:新建一张表的不同Entity  57

4.2.3 第二种方法:直接定义一个UserOnlyNameEmailDto  58

4.2.4 第三种方法:返回结果是一个POJO的接口  60

4.2.5 写查询方法的一个小技巧  62

4.3 本章小结  62

第5章 @Query语法详解及其应用  63

5.1 快速体验@Query的方法  63

5.2 JpaQueryLookupStrategy关键源码剖析  64

5.3 @Query的基本用法  66

5.3.1 JPQL的语法  67

5.3.2 @Query的用法案例  68

5.3.3 @Query的排序  68

5.3.4 @Query的分页  69

5.3.5 @Param的用法  70

5.4 @Query之Projections应用返回指定DTO  70

5.4.1 利用UserDto类  72

5.4.2 利用UserDto接口  73

5.5 @Query动态查询解决方法  74

5.6 本章小结  77

第6章 @Entity的常用注解及Java多态场景应用  78

6.1 JPA协议中关于实体的相关规定  78

6.2 实体里面常见的注解  79

6.3 生成注解的小技巧  85

6.4 联合主键  86

6.4.1 如何通过@IdClass实现联合主键  86

6.4.2 @Embeddable与@EmbeddedId注解的使用  88

6.5 如何实现实体之间的继承关系  89

6.5.1 @Inheritance(strategy?=?InheritanceType.SINGLE_TABLE)  90

6.5.2 @Inheritance(strategy?=?InheritanceType.JOINED)  91

6.5.3 @Inheritance(strategy?=?InheritanceType.TABLE_PER_CLASS)  93

6.5.4 关于继承关系的经验之谈  94

6.6 本章小结  95

第7章 实体之间关联关系注解的正确使用  96

7.1 @OneToOne  96

7.1.1 @OneToOne的源码解读  98

7.1.2 mappedBy的注意事项  99

7.1.3 CascadeType的用法  99

7.1.4 orphanRemoval的属性用法  100

7.1.5 主键和外键都是同一个字段  101

7.1.6 @OneToOne延迟加载下只需要ID值  102

7.1.7 @OneToOne的最佳实践  104

7.2 @JoinCloumns和@JoinColumn  105

7.3 @ManyToOne和@OneToMany  106

7.4 @ManyToMany  110

7.4.1 利用@ManyToOne和@OneToMany表达多对多的关联关系  112

7.4.2 @ManyToMany的最佳实践  114

7.5 本章小结  114

第8章 Jackson在实体里面的注解详解  115

8.1 Jackson的基本语法  115

8.1.1 三个核心模块  116

8.1.2 Jackson提供的扩展jar包  116

8.1.3 Jackson中常用的一些注解  117

8.1.4 实例  118

8.2 Jackson和Spring的关系  121

8.2.1 应用场景一:Spring MVC的View层  121

8.2.2 应用场景二:Open-Feign  121

8.2.3 应用场景三:Redis里面  122

8.2.4 应用场景四:JMS消息序列化  122

8.3 Jackson的原理分析  123

8.3.1 Jackson的可见性原理分析  123

8.3.2 反序列化最重要的方法  124

8.3.3 Module的加载机制  126

8.4 Jackson与JPA常见的问题  127

8.4.1 如何解决死循环问题  127

8.4.2 JPA实体JSON序列化的常见报错及解决方法  128

8.4.3 推荐的配置项  129

8.4.4 JSON序列化和Java序列化  131

8.5 本章小结  131

第二部分 高阶用法与实例

第9章 QueryByExampleExecutor的用法和原理分析  135

9.1 QueryByExampleExecutor的用法  135

9.1.1 基本方法  135

9.1.2 使用案例  136

9.2 QueryByExampleExecutor的语法  140

9.2.1 Example的语法详解  140

9.2.2 ExampleMatcher方法概述  141

9.2.3 初始化ExampleMatcher实例的方法  142

9.2.4 ExampleMatcher的语法  143

9.2.5 ExampleMatcher的完整例子  145

9.2.6 使用QueryByExampleExecutor时需要考虑的因素  146

9.3 QueryByExampleExecutor的实现原理  146

9.3.1 QueryByExampleExecutor的源码分析  146

9.3.2 JpaSpecificationExecutor的接口结构  148

9.3.3 通过QBE反向思考JpaSpecificationExecutor  149

9.4 本章小结  149

第10章 JpaSpecificationExecutor的实现原理  150

10.1 JpaSpecificationExecutor的使用案例  150

10.2 JpaSpecificationExecutor的语法详解  154

?10.2.1 Root<User> root  156

?10.2.2 CriteriaQuery<?> query  156

?10.2.3 CriteriaBuilder  157

10.3 JpaSpecificationExecutor的原理分析  158

10.4 JpaSpecificationExecutor实战  160

?10.4.1 自定义MySpecification  161

?10.4.2 利用Specification创建以search为查询条件的RESTful API  163

10.5 本章小结  165

第11章 Querydsl在JPA中的应用  166

11.1 Querydsl快速入门  166

11.2 Querydsl的语法  170

?11.2.1 QuerydslPredicateExecutor  170

?11.2.2 QuerydslBinderCustomizer  172

?11.2.3 类型安全的应用  174

11.3 Querydsl对WebMVC的支持

 及源码分析  175

?11.3.1 @QuerydslPredicate注解  175

?11.3.2 QuerydslPredicateArgument-

 Resolver源码分析  177

11.4 本章小结  179

第12章 如何自定义Repository  180

12.1 EntityManager简介  180

?12.1.1 EntityManager的常用方法  180

?12.1.2 EntityManager的使用  182

12.2 @EnableJpaRepositories详解  183

?12.2.1 @EnableJpaRepositories的语法  183

?12.2.2 @EnableJpaRepositories的默认加载方式  185

12.3 自定义Repository的实现类的方法  186

?12.3.1 第一种方法:定义独立的Repository的Impl实现类  186

?12.3.2 第一种方法的原理分析  187

?12.3.3 第二种方法:通过@EnableJpaRepositories定义默认的实现类  190

?12.3.4 第二种方法的原理分析  192

12.4 实际应用场景  193

12.5 本章小结  193

第13章 JPA的Auditing功能  194

13.1 Auditing是什么  194

13.2 如何实现Auditing  195

?13.2.1 第一种方式:直接在实例里面添加上述四个注解  195

?13.2.2 第二种方式:在实体里面实现Auditable接口  198

?13.2.3 第三种方式:利用@MappedSuperclass注解  200

13.3 JPA的Auditing功能解决了哪些问题  201

13.4 Auditing的实现原理  202

?13.4.1 Auditing的源码分析  202

?13.4.2 结论  204

13.5 本章小结  205

第14章 @Entity回调方法的正确使用  206

14.1 Java Persistence API规定的回调方法  206

?14.1.1 Entity的回调事件注解  206

?14.1.2 语法注意事项  207

14.2 JPA回调注解的使用方法  207

?14.2.1 第一种用法:在实体和super-class中使用  207

?14.2.2 第二种用法:自定义EntityListener  212

?14.2.3 关于@EntityListeners加载顺序的说明  214

14.3 JPA回调注解的最佳实践  214

14.4 JPA回调注解的实现原理和事件机制  216

14.5 本章小结  217

第15章 乐观锁机制和重试机制在实战中的应用  218

15.1 什么是乐观锁  218

15.2 乐观锁的实现方法  218

?15.2.1 @Version的用法  219

?15.2.2 @Version对Save方法的影响  222

15.3 isNew判断的逻辑  222

15.4 乐观锁机制和重试机制的实战  224

?15.4.1 重试机制详解  224

?15.4.2 @Retryable的详细用法  225

?15.4.3 乐观锁+重试机制的最佳实践  227

15.5 悲观锁的实现  227

15.6 本章小结  228

第16章 JPA对Web MVC开发的支持  229

16.1 DomainClassConverter组件  230

?16.1.1 一个实例  230

?16.1.2 源码分析  231

16.2 Page和Sort的参数支持  233

?16.2.1 一个实例  233

?16.2.2 原理分析  235

16.3 Web MVC的参数绑定  236

?16.3.1 一个实例  237

?16.3.2 原理分析  238

16.4 Querydsl的Web  MVC支持  239

?16.4.1 一个实例  239

?16.4.2 原理分析  241

16.5 @DynamicUpdate和

 @DynamicInsert详解  242

?16.5.1 通过语法快速了解  242

?16.5.2 使用案例  243

?16.5.3 只更新非Null的字段  246

?16.5.4 @DynamicUpdate与@LastModifiedDate一起使用  248

16.6 Spring Data对系统监控的支持  248

16.7 本章小结  249

第17章 自定义HandlerMethod-ArgumentResolver  250

17.1 Page和Sort参数  250

17.2 HandlerMethodArgumentResolver的用法  252

?17.2.1 HandlerMethodArgument-Resolver详解  252

?17.2.2 与HttpMessageConverter的关系  254

?17.2.3 HttpMessageConverter的执行顺序  254

17.3 HandlerMethodArgumentResolver实战  255

?17.3.1 自定义HandlerMethod-ArgumentResolver  256

?17.3.2 实际工作中的四种常见场景  259

17.4 思路拓展  261

?17.4.1 WebMvcConfigurer介绍  261

?17.4.2 对JSON的返回结果进行统一封装  262

17.5 本章小结  264

第18章 DataSource详解及其加载过程  265

18.1 数据源是什么  265

?18.1.1 DataSource源码分析  266

?18.1.2 数据源、驱动、连接和连接池的关系  268

18.2 数据源的加载原理和过程  269

?18.2.1 DataSourceAutoConfiguration数据源的加载过程分析  269

?18.2.2 Hikari数据源下的MySQL配置最佳实践  274

?18.2.3 Hikari数据通过Prometheus的监控指标应用  276

18.3 AliDruidDataSource的配置与介绍  278

18.4 命名策略详解及其实践  279

?18.4.1 Hibernate 5的命名策略  279

?18.4.2 加载原理与自定义方法  282

?18.4.3 实际应用场景  283

18.5 数据库的时区问题  283

?18.5.1 MySQL时间类型字段和时区的关系  283

?18.5.2 MySQL驱动处理时区的原理  285

18.6 本章小结  286

第19章 生产环境多数据源的处理方法  287

19.1 第一种方式:@Configuration配置方法  287

?19.1.1 通过多个@Configuration的配置方法  287

?19.1.2 DataSource与Transaction-Manager、EntityManager-Factory的关系分析  294

?19.1.3 默认的JpaBaseConfiguration的加载方式分析  294

19.2 第二种方式:利用Abstract-RoutingDataSource配置  295

?19.2.1 利用AbstractRoutingData-Source的配置方法  296

?19.2.2 微服务下多数据源的思考  299

?19.2.3 微服务下的实战建议  300

19.3 本章小结  300

第20章 事务、连接池之间的关系与配置  301

20.1 事务的基本原理  301

?20.1.1 四种MySQL事务的隔离级别  302

?20.1.2 MySQL中事务与连接的关系  303

20.2 Spring事务的配置方法  304

?20.2.1 默认@Transactional注解式事务  305

?20.2.2 @Transactional的局限性  307

?20.2.3 TransactionTemplate的用法  308

?20.2.4 自定义TransactionHelper  310

?20.2.5 AspectJ事务配置  310

?20.2.6 通过日志分析配置方法的过程  311

20.3 Spring事务的实现原理  313

?20.3.1 Spring事务源码分析  313

?20.3.2 事务和连接池在JPA中的注意事项  318

20.4 本章小结  318

第三部分 原理在实战中的应用

第21章 JPA中的Hibernate加载过程与配置项  320

21.1 Hibernate架构分析  320

21.2 Hibernate 5在Spring Boot 2中的加载过程  321

?21.2.1 JpaProperties属性  322

?21.2.2 HibernateJpaConfiguration分析  323

?21.2.3 自动加载过程类之间的关系  328

21.3 Repositories的加载模式  329

21.4 在调试时需要的日志配置  331

21.5 本章小结  333

第22章 理解Persistence Context的核心概念  334

22.1 Persistence Context相关核心概念  334

?22.1.1 EntityManagerFactory和Persistence Unit  334

?22.1.2 EntityManager和PersistenceContext  335

22.2 实体对象的生命周期  337

?22.2.1 第一种:New状态  337

?22.2.2 第二种:Detached状态  338

?22.2.3 第三种:Managed状态  339

?22.2.4 第四种:Removed状态  339

22.3 解密EntityManager的f?lush()方法  340

?22.3.1 Flush的作用  340

?22.3.2 Flush机制  341

?22.3.3 Flush会改变SQL的执行顺序  342

?22.3.4 Flush与事务提交的关系  343

?22.3.5 Flush与乐观锁的关系  344

?22.3.6 saveAndFlush和save的区别  345

22.4 Dirty判断逻辑及其作用  346

?22.4.1 Dirty效果的例子  346

?22.4.2 Entity判断Dirty的过程  346

22.5 本章小结  347

第23章 Session的open-in-view对事务的影响  348

23.1 Session是什么  348

机械工业出版社旗舰店店铺主页二维码
机械工业出版社旗舰店 微信公众号认证
扫描二维码,访问我们的微信店铺
随时随地的购物、客服咨询、查询订单和物流...

Spring Data JPA:入门、实战与进阶

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

打开微信,扫一扫

或搜索微信号:cmp1952
机工书院官方微信公众号

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏