本书以Java EE为主要开发平台,系统讲解了通过Spring、Spring MVC和MyBatis(SSM)三大框架开发企业项目的方法、技术与实践。本书主要介绍了Spring、Spring MVC和MyBatis的基础知识,Spring的资源管理,如何实现控制反转,如何通过Spring表达式语言简化代码,如何通过面向切面编程降低业务逻辑各部分之间的耦合度,如何整合数据层,并结合具体案例讲述了如何通过SSM、Spring Boot实现项目的整合。
本书适合Java程序员、SSM开发人员、Spring Boot开发人员阅读。
1.SSM 是Spring、Spring MVC 和MyBatis 框架的组合,是目前Java 领域中使用非常广泛的开源Web 框架,并且越来越多地应用于企业级项目的开发中。
2.本书以实用性为原则,基于Java EE,不仅讲解了Spring 、Spring MVC和MyBatis三大框架的精髓,还结合具体的项目案例介绍了如何通过SSM 框架完成企业级项目的开发。
3.本书通过大量源代码和项目案例,展示了优秀SSM框架的设计思路, SSM框架里面高级特性的实现方式,以及 SSM框架的内部设计细节、编程技巧,有助于开发人员熟练地使用SSM框架提高开发效率、降低开发成本。
本书主要内容:
·Spring、Spring MVC和MyBatis的基础知识;
·Spring的资源管理方式;
·实现控制反转的方法;
·SpEL的语法和应用;
·面向切面编程的思想;
·整合数据层的方法。
肖海鹏 51CTO金牌讲师,具有10年大型项目经验和10年Java教学经验,曾担任艺龙旅行网的架构师、TechFaith公司的系统工程师等。他在网络上推出了“Java Web应用开发技术”“SSM+SpringBoot——从入门、案例实战到企业级项目贯穿”“多线程与线程池技术详解”等视频教程,广受网友好评。
牟东旭 富景天策科技集团高级项目经理,不仅精通SSM、Spring Boot、Spring Cloud等主流Java开源框架,还精通Hadoop、Kafka、Hive、Spark和Kylin等大数据技术。他曾经从事过多年一线互联网开发工作,目前专注于气象服务领域的产品策划 、技术架构和产品研发工作。
第 1章 Spring基础知识 1
1.1 Spring与Java EE 2
1.1.1 下载Java EE资源 2
1.1.2 Java EE 3
1.1.3 Java EE 7的架构 4
1.1.4 Spring与Java EE的关系 5
1.2 Spring项目 5
1.3 比较Spring Framework历史版本 8
1.3.1 下载Spring Framework资源 8
1.3.2 Spring 4.x相对于Spring 3.x的变化 9
1.3.3 Spring 5.x的新增功能 11
1.4 Spring Framework技术 12
1.4.1 核心技术 12
1.4.2 数据访问层的整合 12
1.4.3 Web层技术 13
1.4.4 与外部系统的集成 14
1.5 Spring Framework模块的组成 14
1.5.1 模块架构 14
1.5.2 模块与JAR包的对应关系 15
1.5.3 模块的功能 15
第 2章 Spring的资源管理 17
2.1 资源管理类 17
2.2 资源 18
2.3 资源访问接口 18
2.4 资源加载 19
2.5 从配置中获取资源 21
2.6 应用上下文与资源 22
2.7 MyBatis的资源配置 22
第3章 IoC 24
3.1 IoC与DI的概念 24
3.2 IoC容器与ApplicationContext 24
3.3 容器的创建与使用 25
3.3.1 创建IoC容器 25
3.3.2 从容器读取Bean对象 28
3.3.3 “Hello,Spring”示例 28
3.4 Bean对象的管理 29
3.4.1 BeanDefinition 29
3.4.2 id属性和name属性的区别 31
3.4.3 创建Bean对象 31
3.5 HelloIoC示例 36
3.5.1 面向接口编程 37
3.5.2 通过XML和反射实现IoC 37
3.5.3 通过Spring实现IoC 39
3.6 依赖注入 40
3.6.1 依赖注入的定义 40
3.6.2 项目案例:StaffUser系统与IoC 41
3.6.3 通过构造函数注入 46
3.6.4 通过set方法注入 50
3.6.5 依赖注入的处理流程 52
3.6.6 依赖配置 52
3.6.7 通过Autowire注入 62
3.6.8 方法注入 67
3.6.9 依赖注入总结 71
3.7 Bean对象的作用域 72
3.7.1 配置Bean的作用域 73
3.7.2 singleton和prototype作用域 73
3.7.3 HelloSpringAction示例 75
3.7.4 Bean的Web应用 77
3.7.5 Bean的依赖 78
3.7.6 JavaBean的属性范围 78
3.8 定制Bean的特性信息 79
3.8.1 处理Bean的生命周期回调 79
3.8.2 Aware接口 84
3.9 IoC容器扩展 85
3.9.1 BeanPostProcessor接口 85
3.9.2 FactoryBean接口 87
3.10 注解配置 90
3.10.1 与JSR相关的注解 90
3.10.2 与Spring相关的注解 98
3.11 标准事件与自定义事件 100
3.11.1 标准事件 100
3.11.2 项目案例:打印邮件黑名单 101
3.11.3 项目案例:接收多类型消息 103
3.12 Bean工厂 104
3.12.1 BeanFactory接口 104
3.12.2 HierarchicalBeanFactory接口 104
3.12.3 ListableBeanFactory接口 105
3.12.4 DefaultListableBeanFactory类 105
3.12.5 Bean与BeanFactory 106
3.12.6 IoC容器与BeanFactory 106
第4章 SpEL 108
4.1 SpEL的基本概念 108
4.2 SpEL的基本语法 109
4.2.1 算术运算符 109
4.2.2 比较运算符 110
4.2.3 逻辑运算符 111
4.2.4 其他运算符 112
4.3 ExpressionParser 113
4.3.1 在代码中调用SpEL 113
4.3.2 在代码中调用Bean对象的属性 114
4.4 基于XML的SpEL应用 115
4.5 通过正则表达式校验邮箱 116
4.6 项目案例:基于@Value注解的应用 117
第5章 AOP 120
5.1 AOP概述 120
5.1.1 AOP中的专业术语 120
5.1.2 通知的类型 121
5.1.3 AOP动态代理的选择 122
5.2 支持@AspectJ 123
5.2.1 @AspectJ 123
5.2.2 autoproxying配置 123
5.2.3 声明切面 123
5.2.4 声明切入点 124
5.2.5 切入点表达式 124
5.2.6 声明基于注解的通知 127
5.2.7 管理StaffUser日志 130
5.2.8 管理StaffUser数据库的连接 131
5.3 基于XML的AOP配置 132
5.3.1 声明切面 132
5.3.2 声明切入点 133
5.3.3 声明基于XML的通知 133
5.3.4 使用通知器 135
5.3.5 管理StaffUser系统的日志 135
5.3.6 管理StaffUser系统中的数据库连接 137
5.4 代理机制 137
5.4.1 静态代理 138
5.4.2 动态代理 140
5.4.3 项目案例:自动管理StaffUser系统中的数据库连接 143
5.4.4 项目案例:基于动态代理实现StaffUser系统的事务处理 148
5.4.5 项目案例:基于AspectJ实现动态的事务管理 156
第6章 整合数据层 160
6.1 事务分类 160
6.2 Spring事务模型 162
6.3 Spring事务抽象模型 163
6.4 事务与资源管理 166
6.5 Spring声明性事务 167
6.5.1 使用XML管理声明性事务 167
6.5.2 项目案例:使用XML配置StaffUser事务 168
6.5.3 JDBCDaoSupport 173
6.5.4 通过注解管理声明性事务 174
6.5.5 项目案例:使用注解管理StaffUser事务 175
6.6 Spring编程式事务 178
6.6.1 编程式事务的管理 178
6.6.2 在Spring中通过编程式事务新增员工 178
6.7 声明性事务与编程式事务的选择 181
6.8 Spring事务的传播属性 181
6.8.1 Propagation.REQUIRED 182
6.8.2 Propagation.REQUIRES_NEW 185
6.8.3 Propagation.NESTED 187
6.9 关于数据库连接管理的总结 187
6.9.1 JdbcDaoSupport 188
6.9.2 数据库连接的控制 188
第7章 Spring MVC 193
7.1 Spring MVC介绍 193
7.1.1 视图与控制层技术 194
7.1.2 Spring MVC支持的特性 194
7.2 HelloMVC项目 195
7.2.1 Eclipse和Tomcat 8的环境配置 195
7.2.2 Servlet控制器与逻辑类 200
7.2.3 MVC架构 201
7.3 HelloSpringMVC示例 201
7.3.1 导入模块和包 201
7.3.2 配置前端控制器DispatcherServlet 202
7.3.3 配置spring-mvc.xml 202
7.3.4 编写HelloAction 203
7.3.5 编写视图 203
7.3.6 浏览器测试 204
7.3.7 配置log4j日志 204
7.4 前端控制器DispatcherServlet 204
7.4.1 Spring Web MVC架构 204
7.4.2 DispatcherServlet与IoC容器的关系 205
7.4.3 DispatcherServlet的功能 207
7.5 通过源代码解析DispatcherServlet的工作流程 208
7.5.1 添加源代码 208
7.5.2 通过断点跟踪观察DispatcherServlet的工作流程 209
7.5.3 前端控制器的doDispatch()方法 210
7.5.4 创建IoC容器 211
7.6 控制器@Controller 213
7.6.1 @Controller概述 213
7.6.2 @RequestMapping 216
7.6.3 控制器的异步处理 250
7.7 拦截器 255
7.7.1 HandlerMapping接口 255
7.7.2 项目案例:在非工作时间拒绝服务 256
7.7.3 拦截器运行流程分析 258
7.8 视图解析 259
7.8.1 视图解析的主要接口 259
7.8.2 JSP视图 260
7.8.3 通过ViewResolver解析视图 260
7.8.4 视图解析器链 261
7.8.5 重定向到视图 262
7.9 使用Flash属性 266
7.10 使用Locale 267
7.10.1 Locale对象 267
7.10.2 Locale解析器 267
7.10.3 Locale拦截器 268
7.10.4 项目案例:国际化应用 269
7.11 主题 272
7.11.1 主题介绍 272
7.11.2 项目案例:主题的应用 273
7.12 multipart文件的上传 275
7.12.1 MultipartResolver 275
7.12.2 项目案例:上传图片 276
7.13 异常处理 277
7.13.1 HandlerExceptionResolver 277
7.13.2 SimpleMappingExceptionResolver 277
7.13.3 @ExceptionHandler 278
7.13.4 标准异常解析 279
7.14 使用JSP与JSTL 281
7.14.1 JSP与JSTL 281
7.14.2 Spring的基本标签 281
7.14.3 Spring的form标签库 282
第8章 基于Spring MVC的书城项目实战 285
8.1 项目结构与用户权限 285
8.2 开发环境 285
8.3 表的结构设计 285
8.4 项目所需JAR包 287
8.5 配置前端控制器DispatcherServlet 288
8.6 配置spring-mvc.xml 288
8.7 配置log4j日志 290
8.8 配置数据库连接 290
8.9 实现权限校验 291
8.10 显示主页图书列表 292
8.11 实现图书明细页 292
8.12 用户管理 293
8.12.1 用户登录 293
8.12.2 用户退出 294
8.12.3 用户注册 295
8.12.4 用户名校验 296
8.13 购物车实现 297
8.13.1 购物车设计 297
8.13.2 我的购物车 298
8.13.3 加入购物车 298
8.13.4 移除购物车 299
8.14 用户付款 299
8.14.1 结算 299
8.14.2 付款 300
8.15 图书上传 302
8.16 查询用户购买记录 303
第9章 通过Spring整合书城项目 306
9.1 配置整合环境 306
9.2 配置业务Bean 307
9.3 配置依赖注入 308
9.4 配置声明性事务 308
9.5 处理异常 309
9.6 常见错误 311
第 10章 通过Spring进行数据校验 314
10.1 数据校验的概念 314
10.2 在Spring中实现数据校验 315
10.2.1 Validator接口 315
10.2.2 DataBinder类 318
10.2.3 BeanWrapper接口 319
10.2.4 属性编辑器 320
10.3 项目案例:用户注册校验 322
第 11章 MyBatis基础知识 324
11.1 下载MyBatis资源 324
11.2 快速入门示例 325
11.2.1 创建SqlSessionFactory 326
11.2.2 从SqlSessionFactory获得SqlSession 327
11.2.3 新建Mapper接口和映射文件 327
11.2.4 配置映射文件的指向 328
11.2.5 调用Mapper接口 328
11.2.6 测试 328
11.2.7 通过log4j跟踪MyBatis 328
11.3 MyBatis的原理 329
11.3.1 SqlSession与连接 329
11.3.2 SqlSession的getMapper 330
11.4 配置MyBatis 332
11.4.1 配置属性文件 333
11.4.2 配置setting项 334
11.4.3 配置typeAliases 336
11.4.4 配置typeHandlers 338
11.4.5 配置ObjectFactory 342
11.4.6 配置plugins拦截器 343
11.4.7 配置环境 344
11.4.8 配置databaseIdProvider 351
11.4.9 配置映射文件的路径 352
11.5 配置映射文件 353
11.5.1 mapper元素 353
11.5.2 select元素 354
11.5.3 插入、删除和更新元素 355
11.5.4 项目案例:新增员工 357
11.5.5 项目案例:员工打卡 361
11.5.6 配置参数 365
11.5.7 resultMap 368
11.5.8 项目案例:查询员工打卡记录 373
11.5.9 缓存 377
11.6 动态SQL 381
11.6.1 if语句 381
11.6.2 choose语句 382
11.6.3 foreach语句 384
第 12章 通过Spring整合StaffUser系统 387
12.1 下载资源 387
12.2 项目案例:整合StaffUser系统 388
12.2.1 导入包 388
12.2.2 配置beans.xml文件 389
12.2.3 配置服务层和持久层依赖的对象 390
12.2.4 管理事务 391
第 13章 通过SSM整合书城项目 395
13.1 搭建SSM整合环境 395
13.1.1 导入包 395
13.1.2 配置数据库连接 395
13.1.3 设置MyBatis的核心配置文件 396
13.1.4 设置Spring的核心配置文件 396
13.2 定义Mapper接口和配置Mapper文件 398
13.3 在持久层配置依赖注入Mapper 398
13.4 实现MyBatis持久层 399
13.4.1 显示主页图书列表 399
13.4.2 显示图片 399
13.4.3 显示图书详情 400
13.4.4 管理用户 401
13.4.5 实现购物车 402
13.4.6 用户付款 403
13.4.7 上传图书 405
13.4.8 查询用户购买记录 406
第 14章 通过Spring Boot与SSM整合书城项目 408
14.1 Maven与环境配置 408
14.1.1 Maven的作用 408
14.1.2 通过Maven配置pom.xml 409
14.1.3 配置Maven环境 412
14.2 Spring Boot与环境配置 413
14.2.1 Spring Boot 413
14.2.2 Spring Boot开发环境 414
14.3 示例项目 415
14.3.1 微服务项目 415
14.3.2 Web项目 420
14.4 整合书城项目 423
14.4.1 配置书城项目的Spring Boot环境 423
14.4.2 启动类App 428