• Spring Data JPA:入门、实战与进阶
  • Spring Data JPA:入门、实战与进阶
  • Spring Data JPA:入门、实战与进阶
  • Spring Data JPA:入门、实战与进阶
  • Spring Data JPA:入门、实战与进阶
  • Spring Data JPA:入门、实战与进阶
  • Spring Data JPA:入门、实战与进阶
  • Spring Data JPA:入门、实战与进阶
21年品牌 40万+商家 超1.5亿件商品

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

本店图书 都是正版图书 可开电子发票 需要发票的联系客服!

63.82 4.9折 129 全新

库存8件

四川成都
认证卖家担保交易快速发货售后保障

作者张振华

出版社机械工业出版社

ISBN9787111692201

出版时间2021-11

装帧平装

开本16开

定价129元

货号29328997

上书时间2025-01-10

百叶图书

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
前言
勇敢地走出舒适区,突破自己的技术瓶颈
你好,我是张振华,在Java领域从业已有十几年,也算是一个“Java老兵”了,我曾先后在驴妈妈、携程等互联网公司担任Java架构师、开发主管等职务。在工作期间,我既负责过后端服务的平台架构,也实现过微服务的升级,同时还写过公司的很多核心框架,遇到过很多人都会遇到的常见问题,积累并总结了一些可以复用和迁移的宝贵经验。
我是如何学习Spring Data JPA的
大概四五年前,公司入职了一批架构师,他们引入了Spring Data JPA框架。起初接触这个框架时我的确很排斥,心想,这么复杂的框架真不如MyBatis简单—随便写个简单的SQL就好了,为什么要学 A呢?而且还要学习一大堆相关联的东西(比如要了解Session原理),这么复杂,它有什么好处呢?加上那时候我对JPA框架的理解不是很深入,也没有研究其背后的原理,写的代码常常会有各种Bug……
但冷静下来之后,我才意识到其实是自己一直待在所谓的舒适区的缘故,既然公司的资深架构师们引入了这门技术,那它肯定是有好处的,不如就先用着,只有掌握了这门技术才能知道它到底好不好。既然是做技术的,总要有点追求,有点极客精神,否则很容易跟不上技术发展的速度和时代发展的潮流。
于是,我决定潜心研究一番。而那时候,资深架构师只负责引入Spring Data JPA技术,不负责讲解其使用原理,自己摸索起来比较吃力,我确实也走了不少弯路。一开始只掌握Spring Data JPA的基本用法时我就遇到了一些问题(比如一个 常见的动态SQL问题),由于研究得不太多,用起来别别扭扭的,虽然功能实现了,但总感觉不是 佳实践,反而降低了开发效率。
后来我通过参考官方文档,以及网上搜索的零星资料,逐渐掌握了一些高级用法。但在遇到一些复杂的场景,如在多线程、高并发情况下出现问题时,依然弄不明白是怎么回事。这时我发现JPA协议的 佳实现者是Hibernate,于是我又读了Hibernate的文档,发现Hibernate已经发展好几代了,远不像我们之前想的那么复杂,这才了解了一些基本原理。懂得了原理之后,就基本可以解决很多异常问题了。
随着自己对JPA的使用越来越熟练,Bug没有那么多了,开发效率确实提升了,而且我明显感觉自己的技术能力也提升了很多,如对Session、事务、连接池的理解更深入了。同时我发现Spring Data JPA框架里面有很多优秀的思想,比如乐观锁的处理、分页和排序的统一处理、语义化的方法名、动态代理、策略模式等,这些都可以作为我们自己写框架时的知识储备,值得我们学习和借鉴。
为了让自己更加熟悉这门技术,也为了避免在工作中给别人讲解时误导他人,后来我抽时间看了官方的Java Persistence API约定和规范,又找了一些业内的专家进行沟通与讨论,知道了Hibernate的哪些设计比较好、哪些设计不好,以及我们在实际开发中 好避免使用的技术点。
再后来我为了一探究竟,自己就抽空写文章、写书,然后利用简单的案例来调试Spring Data JPA的源码,思考为什么会有这种语法、具体是怎么写的。通过这一系列的操作,我又收获了运行原理和用法的 佳实践。
这些经验都让我在技术层面得到了提升,随后通过在公司内部的分享,也让身边的同事眼前一亮,并顺利实现了公司框架的升级,个人也顺利地实现升职和加薪。因为我在其中真正受益了,所以就想把自己的这种经历和经验系统整理后分享给你,希望可以帮助你少走一些弯路。
Spring Data JPA的优势
至今,我所在公司的大部分项目都在用Spring Data JPA,究其原因,我认为主要是它具有以下四点优势。
,大势所趋,大公司技能。近两年由于Spring Cloud、Spring Boot逐渐统一Java框架江湖,而与Spring Boot天然集成的Spring Data JPA也逐渐走进了Java开发者的视野,大量“尝鲜者”享受到了这门技术带来的便利。JPA可以使团队在框架约定下进行开发,很少出现有性能瓶颈的SQL。因此不难发现很多大公司,如阿里、腾讯、 等,近几年在招聘的时候都会写明要熟悉JPA,这些大公司以及业内很多开源的新项目也都在使用JPA。
第二,提升开发效率。现在很多人都知道Spring Data JPA是什么,但是觉得JPA很难用,使用中发现Bug后不知道原因。本来用JPA是为了提升开发效率,不会使用反倒容易踩很多坑,所以我们需要系统地学习它。当你遇到复杂问题时,比如,平时你可能需要花几个小时想方法名、SQL逻辑,如果可以熟练地使用JPA,那么半小时甚至几分钟就可以写好查询方法了,再配合测试用例,你的开发质量也会明显提高。总之,系统地学习可以让你少走很多弯路。
第三,提高技术水平。Spring Data对数据操作进行了大统一,即统一了抽象关系型数据库和非关系型数据的接口、公共部分。当掌握了Spring Data JPA框架后,你几乎可以达到轻易实现Redis、MongoDB等NoSQL操作的水平,因为它们都有统一的Spring Data Commons。如下图所示,从中你可以看到Spring Data和JPA的全景位置关系,这样一来,就可以清楚地知道JPA的重要作用和脉络了。

第四,求职加分项。如果简历中突出Spring Data JPA框架的使用,会让

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

作者简介

张振华
Java研发工程师和架构师,在Java技术栈领域有丰富的实战经验,善于总结和分析问题,善于透过问题本质来解决实际工作中遇到的问题。
曾就职于驴妈妈旅游网、上海携程旅行网、上海要买车网等互联网公司,有丰富的电商网站实战经验,就职期间担任过开发人员、架构师、技术专家等,对微服务体系有很深刻的认识。
热衷于技术探索和研发,在GitChat、拉勾教育、CSDN上分享了大量关于Spring Data JPA、Java架构底层原理的文章,并获得一致好评。




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

主编推荐
(1)资深架构师多年一线JPA开发实战经验总结,资深专家多年经验总结,从入门到精通,从原理到实战,深入浅出地完整掌握Spring Data JPA,从而提升开发效率。
(2)从基

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP