检索域对象 210
6.10 使用ResultSetExtractor检索嵌套域对象 211
6.11 建模JDBC操作的Spring类 213
6.12 使用MappingSqlQuery查询数据 215
6.13 插入数据并检索生成的键 220
6.14 使用BatchSqlUpdate进行批处理操作 221
6.15 使用SqlFunction调用存储函数 225
6.16 Spring Data项目:JDBC Extensions 226
6.17 使用JDBC的注意事项 226
6.18 Spring Boot JDBC 227
6.19 小结 229
第7章 在Spring中使用Hibernate 230
7.1 示例代码的示例数据模型 230
7.2 配置Hibernate的SessionFactory 232
7.3 使用Hibernate注解的ORM映射 234
7.3.1 简单的映射 235
7.3.2 一对多映射 238
7.3.3 多对多映射 239
7.4 Hibernate会话接口 240
7.4.1 使用Hibernate查询语言查询数据 241
7.4.2 使用延迟获取进行简单查询 241
7.4.3 使用关联获取进行查询 243
7.5 插入数据 245
7.6 更新数据 248
7.7 删除数据 249
7.8 配置Hibernate以便从实体生成表 250
7.9 注解方法或字段? 252
7.10 使用Hibernate时的注意事项 254
7.11 小结 254
第8章 在Spring中使用JPA 2进行数据访问 255
8.1 JPA 2.1介绍 255
8.1.1 示例代码的示例数据模型 256
8.1.2 配置JPA的EntityManagerFactory 256
8.1.3 使用JPA注解进行ORM映射 258
8.2 使用JPA执行数据库操作 259
8.2.1 使用Java持久化查询语言来查询数据 260
8.2.2 查询非类型化结果 266
8.3 使用构造函数表达式查询自定义结果类型 267
8.3.1 插入数据 269
8.3.2 更新数据 271
8.3.3 删除数据 272
8.4 使用本地查询 273
8.5 使用简单的本地查询 273
8.6 使用SQL ResultSet映射进行本地查询 274
8.7 Spring Data JPA介绍 278
8.7.1 添加Spring Data JPA库依赖项 279
8.7.2 使用Spring Data JPA Repository抽象
进行数据库操作 279
8.8 使用JpaRepository 283
8.9 带有自定义查询的Spring Data JPA 284
8.10 通过使用Hibernate Envers保存
实体版本 293
8.10.1 为实体版本控制添加表 293
8.10.2 为实体版本控制配置
EntityManagerFactory 294
8.10.3 启用实体版本控制和历史检索 296
8.10.4 测试实体版本控制 297
8.11 Spring Boot JPA 298
8.12 使用JPA时的注意事项 302
8.13 小结 302
第9章 事务管理 303
9.1 研究Spring事务抽象层 303
9.2 PlatformTransactionManager的实现 304
9.3 分析事务属性 305
9.3.1 TransactionDefinition接口 305
9.3.2 TransactionStatus接口 306
9.4 示例代码的示例数据模型和基础结构 307
9.4.1 创建一个带有依赖项的简单Spring JPA项目 307
9.4.2 示例数据模型和通用类 308
9.4.3 使用AOP配置进行事务管理 315
9.5 使用编程式事务 316
9.6 使用Spring实现全局事务 318
9.6.1 实现JTA示例的基础结构 318
9.6.2 使用JTA实现全局事务 319
9.6.3 Spring Boot JTA 325
9.6.4 使用JTA事务管理器的注意事项 328
9.7 小结 329
第10章 使用类型转换和格式化进行验证 330
10.1 依赖项 330
10.2 Spring类型转换系统 331
10.3 使用PropertyEditors从字符串进行转换 331
10.4 Spring类型转换介绍 333
10.4.1 实现自定义转换器 333
10.4.2 配置ConversionService 334
10.4.3 任意类型之间的转换 335
10.5 Spring中的字段格式化 338
10.5.1 实现自定义格式化器 338
10.5.2 配置ConversionServiceFactoryBean 339
10.6 Spring中的验证 340
10.6.1 使用Spring Validator接口 340
10.6.2 使用JSR-349 Bean Validation 342
10.6.3 在Spring中配置Bean Validation支持 343
10.6.4 创建自定义验证器 344
10.7 使用AssertTrue进行自定义验证 346
10.8 自定义验证的注意事项 347
10.9 决定使用哪种验证API 347
10.10 小结 347
第11章 任务调度 348
11.1 任务调度示例的依赖项 348
11.2 Spring中的任务调度 349
11.2.1 Spring TaskScheduler抽象介绍 349
11.2.2 研究示例任务 350
11.2.3 使用注解进行任务调度 355
11.2.4 Spring中异步任务的执行 357
11.3 Spring中任务的执行 359
11.4 小结 360
第12章 使用Spring远程处理 361
12.1 使用示例的数据模型 362
12.2 为JPA后端添加必需的依赖项 363
12.3 实现和配置SingerService 364
12.3.1 实现SingerService 364
12.3.2 配置SingerService 365
12.3.3 公开服务 367
12.3.4 调用服务 368
12.4 在Spring中使用JMS 369
12.4.1 在Spring中实现JMS监听器 371
12.4.2 在Spring中发送JMS消息 372
12.5 Spring Boot Artemis启动器 373
12.6 在Spring中使用RESTful-WS 375
12.6.1 RESTful Web服务介绍 375
12.6.2 为示例添加必需的依赖项 376
12.6.3 设计Singer RESTful Web服务 376
12.6.4 使用Spring MVC展示REST样式的Web服务 376
12.7 配置Castor XML 377
12.7.1 实现SingerController 378
12.7.2 配置Spring Web应用程序 380
12.7.3 使用curl测试RESTful-WS 382
12.7.4 使用RestTemplate访问RESTful-WS 383
12.7.5 使用Spring Security来保护
RESTful-WS 386
12.8 使用Spring Boot开发RESTful-WS 389
12.9 在Spring中使用AMQP 392
12.10 小结 397
第13章 Spring测试 398
13.1 测试类别介绍 398
13.2 使用Spring测试注解 399
13.3 实施逻辑单元测试 400
13.3.1 添加所需的依赖项 400
13.3.2 单元测试Spring MVC控制器 401
13.4 实现集成测试 403
13.4.1 添加所需的依赖项 403
13.4.2 配置用于服务层测试的配置文件 403
13.4.3 Java配置版本 404
13.4.4 实施基础结构类 405
13.4.5 对服务层进行单元测试 408
13.4.6 丢弃DbUnit 410
13.5 实现前端单元测试 413
13.6 小结 413
第14章 Spring中的脚本支持 414
14.1 在Java中使用脚本支持 414
14.2 Groovy介绍 415
14.2.1 动态类型化 416
14.2.2 简化的语法 416
14.2.3 闭包 417
14.3 与Spring一起使用Groovy 418
14.3.1 开发Singer对象域 418
14.3.2 实现规则引擎 418
14.3.3 将规则工厂实现为Spring可刷新bean 420
14.3.4 测试年龄分类规则 421
14.3.5 内联动态语言代码 423
14.4 小结 424
第15章 应用程序监控 425
15.1 Spring中的JMX支持 425
15.2 将Spring bean导出为JMX 425
15.3 使用Java VisualVM进行JMX监控 426
15.4 监视Hibernate统计信息 428
15.5 使用了Spring Boot的JMX 429
15.6 小结 431
第16章 Web应用程序 432
16.1 实现示例的服务层 433
16.1.1 对示例使用数据模型 433
16.1.2 实现DAO层 435
16.1.3 实现服务层 435
16.2 配置SingerService 436
16.3 MVC和Spring MVC介绍 437
16.3.1 MVC介绍 438
16.3.2 Spring MVC介绍 438
16.3.3 Spring MVC WebApplicationContext层次结构 439
16.3.4 Spring MVC请求生命周期 439
16.3.5 Spring MVC配置 440
16.3.6 在Spring MVC中创建第一个视图 442
16.3.7 配置DispatcherServlet 443
16.3.8 实现SingerController 444
16.3.9 实现歌手列表视图 445
16.3.10 测试歌手列表视图 445
16.4 理解Spring MVC项目结构 445
16.5 实现国际化(il8n) 446
16.5.1 在DispatcherServlet配置中配置国际化 446
16.5.2 为国际化支持而修改歌手列表视图 448
16.6 使用主题和模板 448
16.7 使用Apache Tiles查看模板 450
16.7.1 设计模板布局 450
16.7.2 实现页面布局组件 451
16.8 在Spring MVC中配置Tiles 453
16.9 实现歌手信息视图 454
16.9.1 将URL映射到视图 454
16.9.2 实现显示歌手视图 454
16.9.3 实现编辑歌手视图 456
16.9.4 实现添加歌手视图 459
16.9.5 启用JSR-349(bean验证) 460
16.10 使用jQuery和jQuery UI 462
16.10.1 jQuery和jQuery UI介绍 462
16.10.2 在视图中使用jQuery和jQuery UI 462
16.10.3 使用CKEditor进行富文本编辑 463
16.10.4 使用jqGrid实现具有分页支持的数据网格 464
16.10.5 在歌手列表视图中启用jqGrid 464
16.10.6 在服务器端启用分页 466
16.11 处理文件上传 468
16.11.1 配置文件上传支持 468
16.11.2 修改视图以支持文件上传 469
16.11.3 修改控制器以支持文件上传 470
16.12 用Spring Security保护Web应用程序 471
16.12.1 配置Spring安全性 471
16.12.2 将登录功能添加到应用程序中 473
16.12.3 使用注解来保护控制器方法 475
16.13 使用Spring Boot创建Spring Web
应用程序 475
16.14 设置DAO层 476
16.14.1 设置服务层 477
16.14.2 设置Web层 478
16.14.3 设置Spring安全性 479
16.15 创建Thymeleaf视图 479
16.16 使用Thymeleaf扩展 482
16.17 小结 486
第17章 WebSocket 487
17.1 WebSocket介绍 487
17.2 与Spring一起使用WebSocket 487
17.3 使用WebSocket API 488
17.4 使用STOMP发送消息 496
17.5 小结 500
第18章 Spring项目:批处理、集成和XD等 501
18.1 Spring Batch 502
18.2 JSR-352 507
18.3 Spring Boot Batch 509
18.4 Spring Integration 512
18.5 Spring XD 516
18.6 Spring框架的五个最显著的功能 517
18.6.1 功能性Web框架 518
18.6.2 Java 9 互操作性 526
18.6.3 JDK模块化 526
18.6.4 使用Java 9和Spring WebFlux进行反应式编程 528
18.6.5 Spring支持JUnit 5 Jupiter 529
18.7 小结 536
附录A 设置开发环境 537