本书对第1 版进行了更新和修订,详细讲解了Java EE 轻量级框架中使用最多的SSM框架,即Spring MVC、Spring 和MyBatis 的基本知识和应用。随着互联网的迅猛发展,SSM 框架被越来越多地应用于企业级开发中,其发展势头已经超过大部分Java Web 框架,稳居榜首。本书以实用性为原则,在重点讲解SSM 框架在企业开发中常用的核心技术的同时,分别讲解了Spring MVC、Spring 和MyBatis 的精髓内容,以课堂实录的方式,理论结合实践,边讲边练。此外,作者在本书中还使用SSM 框架改造了经典项目,力求通过项目的实现加深读者对SSM 框架的理解和掌握程度。 本书提供配套完善的学习资源和支持服务,包括电子教案(PPT)、案例素材、源代码、上机练习与课后作业参考答案、教学设计、教学大纲等,为读者带来全方位的学习体验,读者可以在华信教育资源网(www.hxedu.com.cn)上免费下载。 本书既可以作为高等院校本、专科计算机相关专业的程序设计教材,又可以作为Java 技术的培训教材,适合广大编程爱好者阅读与使用。
石毅,拥有多年软件开发从业与教育培训经验,熟悉Java开发企业级应用、Android应用开发、Web前端设计,负责Java软件开发方向课程教学工作,主讲Java、HTML、CSS、JavaScript、jQuery、MySQL、SQL Server、Oracle 数据库、JavaWEB开发、SSM框架、SSH框架、微服务开发等课程。常受邀到各大高校担任软件开发相关课程教学,教学风格幽默风趣、工作态度认真负责、深受广大学生喜欢。出版《Java语言编程基础》《动态网页设计与开发——JavaScript+jQuery》等多本图书。
第1 章 初识MyBatis ................................................................................................................ 1
1.1 框架简介 ................................................................................................................................ 1
1.1.1 为什么使用框架 ................................................................................................................. 1
1.1.2 框架的概念 ......................................................................................................................... 2
1.1.3 框架的优势 ......................................................................................................................... 3
1.1.4 主流框架的介绍 ................................................................................................................. 3
1.2 MyBatis 简介 ........................................................................................................................... 4
1.2.1 数据持久化的概念 ............................................................................................................. 4
1.2.2 传统的JDBC 的劣势 .......................................................................................................... 5
1.2.3 ORM 框架 ........................................................................................................................... 5
1.2.4 Hibernate 与MyBatis 的区别 ............................................................................................. 6
1.3 MyBatis 环境的搭建与MyBatis 的入门程序 ....................................................................... 6
1.3.1 MyBatis 环境的搭建 ........................................................................................................... 6
1.3.2 MyBatis 的入门程序 ......................................................................................................... 10
1.3.3 MyBatis 的优点、缺点及适用场合 ................................................................................. 13
1.3.4 技能训练 ........................................................................................................................... 14
1.4 MyBatis 的基础操作 ............................................................................................................. 14
1.4.1 查询用户信息 ................................................................................................................... 14
1.4.2 技能训练1 ........................................................................................................................ 18
1.4.3 添加用户信息 ................................................................................................................... 18
1.4.4 更新用户信息 ................................................................................................................... 20
1.4.5 删除用户信息 ................................................................................................................... 22
1.4.6 技能训练2 ........................................................................................................................ 23
1.5 MyBatis 的工作原理 ............................................................................................................. 24
第2 章 MyBatis 的核心配置 ....................................................................................................27
2.1 MyBatis 的核心接口和类 ..................................................................................................... 27
2.1.1 SqlSessionFactoryBuilder .................................................................................................. 28
2.1.2 SqlSessionFactory .............................................................................................................. 28
2.1.3 SqlSession .......................................................................................................................... 30
2.1.4 应用案例——查询用户信息 ............................................................................................ 32
2.1.5 技能训练 ........................................................................................................................... 34
2.2 MyBatis 的核心配置文件 ..................................................................................................... 35
2.2.1 mybatis-config.xml ............................................................................................................ 35
2.2.2 技能训练 ........................................................................................................................... 43
2.3 MyBatis 的映射文件 ............................................................................................................. 44
2.3.1 映射文件中的主要元素 .................................................................................................... 44
2.3.2 <select>元素 ...................................................................................................................... 44
2.3.3 <insert>元素 ...................................................................................................................... 45
2.3.4 <update>元素和<delete>元素 ........................................................................................... 46
2.3.5 <sql>元素 .......................................................................................................................... 47
2.3.6 <resultMap>元素 ............................................................................................................... 48
2.3.7 技能训练 ........................................................................................................................... 49
2.4 使用接口实现条件查询 ........................................................................................................ 49
2.4.1 使用<select>元素实现单条件查询 .................................................................................. 49
2.4.2 使用<select>元素实现多条件查询 .................................................................................. 50
2.4.3 实现查询结果的展示 ........................................................................................................ 53
2.4.4 技能训练 ........................................................................................................................... 58
2.5 使用接口实现添加、更新、删除 ........................................................................................ 59
2.5.1 使用<insert>元素实现添加 .............................................................................................. 59
2.5.2 使用<update>元素实现更新 ............................................................................................. 60
2.5.3 使用@Param 注解实现多个参数入参 ............................................................................. 61
2.5.4 使用<delete>元素实现删除 .............................................................................................. 62
2.5.5 技能训练 ........................................................................................................................... 63
第3 章 动态SQL 语句 ............................................................................................................ 66
3.1 动态SQL 语句主要元素 ...................................................................................................... 66
3.2 使用动态SQL 语句实现多条件查询 ................................................................................... 67
3.2.1 使用<if>+<where>元素实现多条件查询......................................................................... 67
3.2.2 技能训练1......................................................................................................................... 72
3.2.3 使用<if>+<trim>元素实现多条件查询 ............................................................................ 72
3.2.4 使用<choose>+<when>+<otherwise>元素实现多条件查询 ........................................... 73
3.2.5 技能训练2......................................................................................................................... 75
3.3 使用动态SQL 语句实现更新 .............................................................................................. 75
3.3.1 使用<if>+<set>元素实现更新 .......................................................................................... 75
3.3.2 技能训练1......................................................................................................................... 78
3.3.3 使用<if>+<trim>元素实现更新 ....................................................................................... 78
3.3.4 技能训练2 ........................................................................................................................ 78
3.4 使用<foreach>元素实现复杂查询 ....................................................................................... 79
3.4.1 MyBatis 入参为Array 类型的<foreach>元素迭代 ......................................................... 79
3.4.2 MyBatis 入参为List 类型的<foreach>元素迭代 ............................................................ 80
3.4.3 技能训练1 ........................................................................................................................ 82
3.4.4 MyBatis 入参为Map 类型的<foreach>元素迭代 ........................................................... 82
3.4.5 技能训练2 ........................................................................................................................ 84
3.5 使用<bind>元素实现SQL 语句拼接 ................................................................................... 85
第4 章 MyBatis 的关联映射 ....................................................................................................88
4.1 关联映射 ............................................................................................................................... 88
4.1.1 关联关系概述 ................................................................................................................... 88
4.1.2 <resultMap>元素的基本配置项 ....................................................................................... 89
4.2 一对一 .................................................................................................................................. 89
4.2.1 应用案例——身份证号码和个人信息的一对一关联 .................................................... 90
4.2.2 应用案例——用户角色和用户信息的一对一关联 ........................................................ 94
4.2.3 技能训练 ........................................................................................................................... 98
4.3 一对多 .................................................................................................................................. 99
4.3.1 应用案例——用户角色和用户信息的一对多关联 ........................................................ 99
4.3.2 应用案例——商品类型和商品信息的一对多关联 ...................................................... 101
4.3.3 技能训练 ......................................................................................................................... 104
4.4 多对多 ................................................................................................................................ 104
4.4.1 应用案例——销售订单和订购商品信息的多对多关联 .............................................. 104
4.4.2 技能训练 ......................................................................................................................... 108
4.5 <resultMap>元素自动映射级别 ......................................................................................... 108
第5 章 深入使用MyBatis ...................................................................................................... 111
5.1 MyBatis 插件的应用——实现分页 .................................................................................... 111
5.1.1 使用SQL 语句实现分页 ................................................................................................. 112
5.1.2 使用RowBounds 实现分页 ............................................................................................. 114
5.1.3 使用PageHelper 实现分页 .............................................................................................. 115
5.1.4 技能训练 .......................................................................................................................... 119
5.2 MyBatis 的缓存机制 ........................................................................................................... 119
5.2.1 一级缓存 ......................................................................................................................... 120
5.2.2 二级缓存 ......................................................................................................................... 124
5.2.3 技能训练 ......................................................................................................................... 127
5.3 MyBatis 的常用注解 ........................................................................................................... 128
5.3.1 增删改查注解的使用 ..................................................................................................... 128
5.3.2 技能训练1....................................................................................................................... 132
5.3.3 关联注解的使用 .............................................................................................................. 132
5.3.4 技能训练2....................................................................................................................... 135
5.3.5 使用注解实现动态SQL 语句 ........................................................................................ 135
5.3.6 技能训练3....................................................................................................................... 140
5.3.7 使用注解实现二级缓存 .................................................................................................. 140
第6 章 初识Spring ................................................................................................................ 144
6.1 Spring 概述 .......................................................................................................................... 144
6.1.1 企业级应用...................................................................................................................... 144
6.1.2 Spring 的体系结构 .......................................................................................................... 145
6.1.3 Spring 的下载及目录结构 .............................................................................................. 147
6.1.4 Spring 的优点 .................................................................................................................. 148
6.2 Spring 的核心容器 .............................................................................................................. 148
6.2.1 BeanFactory ..................................................................................................................... 148
6.2.2 ApplicationContext .......................................................................................................... 149
6.3 Spring 的入门程序 .............................................................................................................. 150
6.4 DI 与IoC............................................................................................................................. 154
6.4.1 相关概念 ......................................................................................................................... 154
6.4.2 DI 的实现方法 ................................................................................................................ 154
6.4.3 理解IoC .......................................................................................................................... 156
6.4.4 技能训练1....................................................................................................................... 158
6.4.5 深入使用DI .................................................................................................................... 159
6.4.6 技能训练2....................................................................................................................... 161
第7 章 Spring Bean ................................................................................................................ 164
7.1 Bean 的配置 ......................................................................................................................... 164
7.2 Bean 的实例化 ..................................................................................................................... 165
7.2.1 构造器实例化 .................................................................................................................. 166
7.2.2 静态工厂方式实例化 ...................................................................................................... 167
7.2.3 实例工厂方式实例化 ...................................................................................................... 168
7.2.4 技能训练 ......................................................................................................................... 169
7.3 Bean 配置方式——基于XML 的配置 .............................................................................. 170
7.3.1 常用DI 的方式 ............................................................................................................... 170
7.3.2 技能训练1....................................................................................................................... 173
7.3.3 使用p 命名空间实现属性setter 方法注入 ................................................................... 174
7.3.4 技能训练2....................................................................................................................... 175
7.3.5 注入不同数据类型 .......................................................................................................... 175
7.4 Bean 配置方式——基于注解的配置 ................................................................................. 178
7.4.1 使用注解定义Bean ........................................................................................................ 178
7.4.2 使用注解实现Bean 的配置 ........................................................................................... 179
7.4.3 加载注解定义的Bean .................................................................................................... 180
7.4.4 技能训练1 ...................................................................................................................... 181
7.4.5 使用Java 标准注解完成Bean 的配置 .......................................................................... 182
7.4.6 技能训练2 ...................................................................................................................... 183
7.5 Bean 配置方式——自动配置 ............................................................................................. 183
7.6 Bean 的作用域 .................................................................................................................... 185
7.6.1 作用域的种类 ................................................................................................................. 185
7.6.2 singleton .......................................................................................................................... 185
7.6.3 prototype .......................................................................................................................... 186
7.6.4 使用注解指定Bean 的作用域 ....................................................................................... 186
7.7 Bean 的生命周期 ................................................................................................................ 187
第8 章 Spring AOP ............................................................................................................... 190
8.1 Spring AOP 概述 ................................................................................................................. 190
8.1.1 AOP 简介 ........................................................................................................................ 190
8.1.2 AOP 术语 ........................................................................................................................ 192
8.2 动态代理 ............................................................................................................................. 193
8.2.1 JDK 动态代理 ................................................................................................................. 193
8.2.2 CGLIB 动态代理 ............................................................................................................ 196
8.2.3 技能训练 ......................................................................................................................... 197
8.3 基于代理类的AOP 实现 .................................................................................................... 198
8.3.1 Spring 的增强处理类型 .................................................................................................. 198
8.3.2 ProxyFactoryBean ........................................................................................................... 198
8.3.3 技能训练 ......................................................................................................................... 200
8.4 基于XML 的声明式AspectJ ............................................................................................. 200
8.4.1 <aop:config>元素及其子元素 ........................................................................................ 201
8.4.2 常用<aop:config>元素的使用 ........................................................................................ 201
8.4.3 技能训练 ......................................................................................................................... 207
8.4.4 常用的增强处理类型 ..................................................................................................... 207
8.5 基于注解的声明式AspectJ ................................................................................................ 208
8.5.1 AspectJ 的注解 ................................................................................................................ 208
8.5.2 使用注解标注切面 ......................................................................................................... 209
8.5.3 技能训练 ......................................................................................................................... 212
8.5.4 Spring 的切面配置小结 .................................................................................................. 212
第9 章 Spring 的数据库开发及事务管理 ............................................................................... 214
9.1 Spring JDBC ........................................................................................................................ 214
9.1.1 Spring JdbcTemplate 类的解析 ....................................................................................... 214
9.1.2 Spring JDBC 的配置 ...................................................................................................... 215
9.2 Spring JdbcTemplate 类的常用方法 ................................................................................... 216
9.2.1 execute()方法 ................................................................................................................... 216
9.2.2 update()方法 .................................................................................................................... 219
9.2.3 query()方法 ...................................................................................................................... 223
9.2.4 技能训练 ......................................................................................................................... 225
9.3 Spring 事务管理概述 .......................................................................................................... 226
9.3.1 事务管理的核心接口 ...................................................................................................... 226
9.3.2 事务管理的方式 .............................................................................................................. 228
9.4 声明式事务管理 .................................................................................................................. 228
9.4.1 基于XML 的声明式事务管理 ....................................................................................... 228
9.4.2 技能训练1....................................................................................................................... 232
9.4.3 基于注解的声明式事务管理 .......................................................................................... 232
9.4.4 技能训练2....................................................................................................................... 235
第10 章 初识Spring MVC ..................................................................................................... 237
10.1 Spring MVC 概述 .............................................................................................................. 237
10.1.1 MVC 设计模式.............................................................................................................. 237
10.1.2 Spring MVC 简介 .......................................................................................................... 239
10.2 Spring MVC 的应用 .......................................................................................................... 240
10.2.1 入门项目 ....................................................................................................................... 240
10.2.2 技能训练1 ..................................................................................................................... 245
10.2.3 优化项目 ....................................................................................................................... 245
10.2.4 技能训练2 ..................................................................................................................... 248
10.3 Spring MVC 的工作流程与特点 ...................................................................................... 249
10.3.1 Spring MVC 的请求处理流程 ...................................................................................... 249
10.3.2 Spring MVC 的工作原理 .............................................................................................. 249
10.3.3 Spring MVC 的特点 ...................................................................................................... 251
10.4 Spring MVC 的核心类与常用注解 .................................................................................. 252
10.4.1 DispatcherServlet ........................................................................................................... 252
10.4.2 @Controller 注解........................................................................................................... 252
10.4.3 @RequestMapping 注解 ................................................................................................ 253
10.4.4 应用案例——基于注解的Spring MVC 的应用 .......................................................... 257
10.4.5 视图解析器 .................................................................................................................... 258
第11 章 Spring MVC 数据绑定与交互 .................................................................................. 261
11.1 数据绑定概述 .................................................................................................................... 261
11.2 简单数据绑定 .................................................................................................................... 262
11.2.1 参数传递(View to Controller) .................................................................................. 262
11.2.2 参数传递(Controller to View) .................................................................................. 272
11.2.3 技能训练 ....................................................................................................................... 276
11.3 复杂数据绑定 .................................................................................................................... 276
11.3.1 自定义数据绑定 ........................................................................................................... 276
11.3.2 Array 绑定 ..................................................................................................................... 279
11.3.3 集合绑定 ....................................................................................................................... 281
11.4 JSON 数据交互 ................................................................................................................. 283
11.4.1 JSON 概述 ..................................................................................................................... 283
11.4.2 JSON 数据转换 ............................................................................................................. 284
11.4.3 解决JSON 数据交互的常见问题 ................................................................................ 290
11.4.4 技能训练 ....................................................................................................................... 293
11.5 REST 风格 ......................................................................................................................... 293
11.5.1 REST 风格概述 ............................................................................................................. 293
11.5.2 应用案例——用户信息查询 ........................................................................................ 294
11.5.3 技能训练 ....................................................................................................................... 296
第12 章 深入使用Spring MVC ............................................................................................. 298
12.1 文件上传............................................................................................................................ 298
12.1.1 文件上传概述 ............................................................................................................... 298
12.1.2 应用案例——文件上传 ................................................................................................ 300
12.1.3 技能训练 ....................................................................................................................... 304
12.2 文件下载............................................................................................................................ 304
12.2.1 应用案例——文件下载 ................................................................................................ 304
12.2.2 应用案例——文件名为中文的文件下载 .................................................................... 305
12.2.3 技能训练 ....................................................................................................................... 307
12.3 拦截器 ............................................................................................................................... 307
12.3.1 拦截器概述 ................................................................................................................... 307
12.3.2 拦截器的执行流程 ....................................................................................................... 309
12.3.3 应用案例——用户登录权限验证 ................................................................................ 313
12.3.4 技能训练 ....................................................................................................................... 317
12.4 异常处理............................................................................................................................ 317
12.4.1 使用SimpleMappingExceptionResolver ...................................................................... 317
12.4.2 自定义ExceptionResolver ............................................................................................ 320
12.4.3 使用@ControllerAdvice 注解 ....................................................................................... 323
12.4.4 技能训练 ....................................................................................................................... 324
第13 章 SSM 框架整合 ......................................................................................................... 327
13.1 SSM 框架整合思路 ........................................................................................................... 327
13.2 XML 文件整合SSM 框架 ................................................................................................ 328
13.2.1 搭建项目基础结构 ........................................................................................................ 328
13.2.2 整合Spring 和MyBatis ................................................................................................ 333
13.2.3 整合Spring 和Spring MVC ......................................................................................... 335
13.3 纯注解整合SSM 框架 ...................................................................................................... 338
13.3.1 使用纯注解实现SSM 框架整合思路 .......................................................................... 338
13.3.2 使用纯注解实现SSM 框架整合 .................................................................................. 338
第14 章 百货中心供应链管理系统 ........................................................................................ 343
14.1 项目介绍 ............................................................................................................................ 343
14.2 需求分析 ............................................................................................................................ 344
14.2.1 功能模块需求分析 ........................................................................................................ 344
14.2.2 非功能模块需求分析 .................................................................................................... 344
14.3 系统设计 ............................................................................................................................ 345
14.3.1 系统架构介绍 ................................................................................................................ 345
14.3.2 系统模块介绍 ................................................................................................................ 346
14.3.3 系统架构设计 ................................................................................................................ 346
14.3.4 文件组织结构介绍 ........................................................................................................ 347
14.3.5 系统开发环境介绍 ........................................................................................................ 347
14.3.6 数据库设计 .................................................................................................................... 347
14.4 系统环境搭建 .................................................................................................................... 354
14.4.1 需要引入的依赖 ............................................................................................................ 354
14.4.2 数据库资源准备 ............................................................................................................ 357
14.4.3 项目环境准备 ................................................................................................................ 357
14.5 应用案例——实现用户登录模块的功能 ......................................................................... 361
14.6 应用案例——实现用户管理模块的功能 ......................................................................... 365
14.6.1 根据用户名和用户权限查询用户信息 ........................................................................ 365
14.6.2 添加用户信息 ................................................................................................................ 368
14.6.3 根据id 查询用户信息 ................................................................................................... 371
14.6.4 更新用户信息 ................................................................................................................ 373
14.6.5 删除用户信息 ................................................................................................................ 376
14.7 技能训练 ............................................................................................................................ 378