
本书是“大数据应用开发(Java)”1+X职业技能等级证书配套教材,同时也是蓝桥学院“Java全栈工程师”培养项目配套教材。本书共17章,以MyBatis基础、MyBatis配置文件、SQL映射文件、关联查询、查询缓存、MyBatis高级开发、Spring框架、Spring AOP、调度框架Quartz、Spring整合MyBatis、Spring MVC、视图与表单、表单标签、文件上传与拦截器、异常处理与Spring MVC处理流程、SSM整合与Maven为基础,通过清晰的图文和完整的案例演示了每项技术的使用细节,并且在本书的最后设置了第17章,介绍目前流行的Spring Boot、Spring Cloud等微服务技术。读者们学习本书后,可以快速掌握Java方向的主流框架技术,并将本书介绍的内容用于企业级项目开发中。本书直接服务于“大数据应用开发(Java)”1+X职业技能等级证书工作,可作为职业院校、应用型本科院校的计算机应用技术、软件技术、软件工程、网络工程和大数据应用技术等计算机类专业的教材,也可供从事计算机相关工作的技术人员参考。
序言 国务院2019年1月印发的《国家职业教育改革实施方案》明确提出,从2019年开始,在职业院校、应用型本科高校启动“学历证书+若干职业技能等级证书”制度试点(即“1+X”证书制度试点)工作。职业技能等级证书是职业技能水平的凭证,反映职业活动和个人职业生涯发展所需要的综合能力。 “1+X”证书制度的实施,有赖于教育行政主管部门、行业企业、培训评价组织和职业院校等多方力量的整合。培训评价组织是其中不可忽视的重要参与者,是职业技能等级证书及标准建设的主体,对证书质量、声誉负总责,其主要职责包括标准开发、教材和学习资源开发、考核站点建设、考核颁证等,并协助试点院校实施证书培训。 截至2020年9月,教育部分三批共遴选了73家培训评价组织,国信蓝桥教育科技(北京)股份有限公司(下称“国信蓝桥”)便是其中一家。国信蓝桥在信息技术领域和人才培养领域具有丰富的经验,其运营的“蓝桥杯”大赛已成为国内领先、国际知名的IT赛事,其蓝桥学院已为IT行业输送了数以万计的优秀工程师,其在线学习平台深受院校师生和IT人士的喜爱。 国信蓝桥在广泛调研企事业用人单位需求的基础上,在教育部相关部门的指导下制定了“1+X”《大数据应用开发(Java)职业技能等级标准》。该标准面向信息技术领域、大数据公司、互联网公司、软件开发公司、软件运维公司、软件营销公司等IT类公司、企事业单位的信息管理与服务部门,面向大数据应用系统开发、大数据应用平台建设、大数据应用程序性能优化、海量数据管理、大数据应用产品测试、技术支持与服务等岗位,规定了工作领域、工作任务及职业技能要求。 本丛书直接服务于职业技能等级标准下的技能培养和证书考取需要,包括7本教材: ?《Java程序设计基础教程》 ?《Java程序设计高级教程》 ?《软件测试技术》 ?《数据库技术应用》 ?《Java Web应用开发》 ?《Java开源框架企业级应用》 ?《大数据技术应用》 目前,开展“1+X”试点、推进书证融通已成为院校特别是“双高”院校人才培养模式改革的重点。所谓书证融通,就是将“X”证书的要求融入学历证书这个“1”里面去,换言之,在人才培养方案的设计和实施中应包含对接“X”证书的课程。因此,选取本丛书的全部或部分作为专业课程教材,将有助于夯实学生基础,无缝对接“X”证书的考取和职业技能的提升。 为使教学活动更有效率,在线上、线下深度融合教学理念的指引下,丛书编委会为本丛书配备了丰富的线上学习资源。获取相关信息,请发邮件至x@lanqiao.org。 最后,感谢教育部、行业企业及院校的大力支持!感谢丛书编委会全体同人的辛苦付出!感谢为本丛书出版付出努力的所有人! 郑 未 2020年12月 前言 掌握了Java Web基础知识后,我们应该能感受到Java在Web方向的巨大作用。从对象传递的范围选取到内置对象的设置、过滤器及监听器等工具的配备,Java从不同角度为Web技术提供了强大的支持。此外,Java Web的相关技术在编码层面也非常灵活,可以由开发人员任意掌控。但在上述技术中似乎存在某些可优化手段,比如能否把一些常见的功能封装起来,以便开发人员在编码时可以像面向对象那样直接调用封装好的功能,进而实现某些复杂的操作。其实,这些优化手段是可以实现的,这就会用到本书介绍的框架技术。简而言之,本书所介绍的技术,可以对Java、Java Web等技术进行简化。例如,MyBatis相当于之前所学的JDBC的升级内容,开发人员可以用更少的代码实现更多的功能,而Spring MVC可以替代Servlet等。 读者在学习本书内容时,可能会发现一种常见的现象:在学习框架技术时,有的人学习得又快又好,而有的人花了大量的时间也很难得到提升。笔者认为,造成这种现象的一个重要原因就是,部分读者对Java和Java Web等基础知识的掌握不够深入。本书所介绍的一些框架技术看似和基础知识的关联不大,实际上,这些内容关联得非常密切,因为很多框架的底层理论都源自Java或Java Web基础知识,所以建议读者在学习本书内容前,务必对相关的基础知识有比较深刻的理解。 本书共17章,第1~5章介绍了MyBatis框架的基本使用方法,即使用MyBatis可以帮助开发人员快速地进行持久化操作;第6章介绍了MyBatis的扩展功能,包括逆向工程、MyBatis Plus和通用Mapper等技术,使读者了解MyBatis的一些高级特性;第7~10章介绍了Spring的相关技术,包括IoC、AOP等Spring核心理论,以及使用Spring整合Quartz及MyBatis的方法;第11~15章介绍了Spring MVC,从映射、视图、表单等方面完整地阐述了Spring MVC的核心技术;第16章则对前面介绍的MyBatis、Spring和Spring MVC进行了整合,这也是目前主流的企业级整合方案;第17章介绍了微服务构建框架Spring Boot和微服务治理框架Spring Cloud,这两者也是目前微服务和分布式领域的主流技术,是每位高阶开发人员的必备技能。 本书是“大数据应用开发(Java)”1+X职业技能等级证书配套教材,同时也是蓝桥学院“Java全栈工程师”培养项目配套教材。为保证每位读者能够切实地掌握书中的内容,蓝桥学院搭建并部署了蓝桥云平台,在蓝桥云平台上提供了配套的实验环境、图文教程和视频课程,书中涉及的所有案例都可以在蓝桥云平台上模拟实现。 本书在易用性上进行了充分考虑,从零基础开始讲解,结合企业应用对知识点进行了取舍,对经典案例进行了改造升级,尽可能降低初学者的学习门槛。本书的内容、结构合理,在每章的开篇位置均设置了“本章简介”,用于概述本章的知识点;在每章的后半部分均设置了“本章小结”,以便读者回顾本章内容;在每章的末尾均设置了“本章练习”,从而帮助读者巩固相关知识。 本书由颜群和夏汛两位老师合作编著。颜群老师是阿里云云栖社区等知名互联网机构的特邀技术专家、认证专家,曾出版过多本专著,在互联网上发布了众多精品视频课程,并获得广泛好评。夏汛老师是泸州职业技术学院人工智能与大数据学院的副院长,具有丰富的软件开发经验和一线授课经验,主持开发了数十个大数据和企业信息化项目,指导学生参加各类竞赛,并在国赛等主要赛事中取得佳绩。上述两位老师分别来自国信蓝桥教育科技(北京)股份有限公司和泸州职业技术学院,因此本书是校企合作、多方参与编写的成果。 感谢丛书编委会各位专家、学者及老师的帮助和指导;感谢配合技术调研的企业及已毕业的学生;感谢蓝桥学院郑未院长对本书的编写指导;感谢蓝桥学院各位同事的大力支持和帮助。另外,本书参考与借鉴了一些专著、教材、论文、报告和网络上的成果、素材、结论和图文,在此向原创作者一并表示衷心的感谢。 期望本书的出版能够为软件开发相关专业的学生、程序员和广大编程爱好者快速入门带来帮助,也期望越来越多的人才加入软件开发行业中,为我国的信息技术发展做出贡献。 由于时间仓促,加之编者水平有限,疏漏和不足之处在所难免,恳请广大读者和社会各界朋友批评指正! 编者联系邮箱:x@lanqiao.org。 编 者
目录 第1章 MyBatis基础 1 1.1 持久化及ORM的概念 1 1.1.1 持久化的概念 1 1.1.2 持久化层 1 1.1.3 ORM的概念及优势 2 1.2 开发第一个基于MyBatis的程序 2 1.2.1 MyBatis配置文件简介 7 1.2.2 SQL映射文件简介 9 1.2.3 使用MyBatis实现CRUD 10 1.2.4 使用Mapper动态代理优化程序 12 1.2.5 MyBatis调用存储过程实现CRUD 16 1.3 本章小结 18 1.4 本章练习 18 第2章 MyBatis配置文件 21 2.1 MyBatis参数设置 21 2.1.1 properties属性 21 2.1.2 settings全局参数配置 22 2.2 为实体类定义别名 24 2.2.1 单个别名定义 24 2.2.2 批量别名定义 25 2.3 类型处理器 26 2.3.1 内置类型处理器 26 2.3.2 自定义类型处理器 27 2.4 本章小结 32 2.5 本章练习 32 第3章 SQL映射文件 35 3.1 输入参数 35 3.1.1 输入参数为简单类型 35 3.1.2 输入参数为实体类对象 38 3.1.3 输入参数为级联对象 40 3.1.4 输入参数为HashMap对象 41 3.2 输出参数 42 3.2.1 输出参数为简单类型或对象 42 3.2.2 输出参数为HashMap对象 43 3.2.3 使用resultMap指定输出类型及映射关系 44 3.3 动态SQL 45 3.3.1 用JDBC实现动态SQL 45 3.3.2 用MyBatis实现动态SQL 46 3.4 本章小结 52 3.5 本章练习 53 第4章 关联查询 55 4.1 一对一查询 55 4.1.1 使用扩展类实现一对一查询 56 4.1.2 使用resultMap实现一对一查询 57 4.2 一对多查询 59 4.3 多对一查询与多对多查询 61 4.3.1 多对一查询 61 4.3.2 多对多查询 61 4.4 延迟加载 62 4.4.1 日志输出 62 4.4.2 延迟加载详解 63 4.5 本章小结 66 4.6 本章练习 67 第5章 查询缓存 68 5.1 一级缓存 68 5.2 二级缓存 70 5.2.1 使用二级缓存 71 5.2.2 禁用二级缓存 73 5.2.3 清理二级缓存 73 5.3 整合第三方提供的二级缓存 75 5.4 本章小结 78 5.5 本章练习 79 第6章 MyBatis高级开发 81 6.1 MyBatis逆向工程 81 6.1.1 逆向工程简介 81 6.1.2 使用MyBatis Generator生成代码 81 6.1.3 MyBatis批量操作 93 6.1.4 PageHelper 97 6.2 MyBatis Plus 99 6.2.1 MyBatis Plus映射关系 99 6.2.2 使用MyBatis Plus实现CRUD 105 6.2.3 条件构造器与AR编程 107 6.3 通用Mapper 108 6.3.1 Mapper概述 109 6.3.2 Mapper中的Selective问题 111 6.3.3 自定义Mapper组合 113 6.4 本章小结 115 6.5 本章练习 116 第7章 Spring框架 117 7.1 Spring框架概述 117 7.1.1 主流框架介绍 117 7.1.2 搭建Spring框架的开发环境 118 7.1.3 开发第一个Spring IoC程序 121 7.1.4 Bean的作用域 123 7.2 Spring IoC 129 7.2.1 Spring IoC的发展 129 7.2.2 通过new()方法创建对象 130 7.2.3 通过工厂模式获取对象 131 7.2.4 通过Spring IoC容器获取对象 132 7.3 依赖注入 133 7.3.1 依赖注入简介 133 7.3.2 依赖注入的三种方式 135 7.4 自动装配 140 7.4.1 根据属性名自动装配 140 7.4.2 根据属性类型自动装配 141 7.4.3 根据构造器自动装配 141 7.5 基于注解方式的IoC配置 142 7.5.1 使用注解定义Bean 142 7.5.2 使用注解实现自动装配 143 7.5.3 扫描注解定义的Bean 144 7.6 本章小结 145 7.7 本章练习 145 第8章 Spring AOP 147 8.1 AOP的原理 147 8.2 AOP的应用 149 8.2.1 基于XML配置文件 149 8.2.2 基于注解 156 8.2.3 基于Schema配置 161 8.3 Spring配置文件 165 8.3.1 配置文件的拆分思路 165 8.3.2 配置文件的加载路径 166 8.3.3 配置文件的整合 166 8.4 本章小结 168 8.5 本章练习 168 第9章 调度框架Quartz 170 9.1 Quartz框架 170 9.1.1 Quartz框架的基本概念 170 9.1.2 Quartz框架入门程序 171 9.1.3 JobExecutionContext 174 9.1.4 ScheduleBuilder 176 9.2 在Spring中集成Quartz 178 9.2.1 Spring整合Quartz的原理 178 9.2.2 通过案例演示Spring整合Quartz 179 9.3 本章小结 185 9.4 本章练习 185 第10章 Spring整合MyBatis 187 10.1 Spring整合MyBatis原理 187 10.2 通过实例演示Spring整合MyBatis 188 10.3 Spring整合MyBatis后的事务管理 193 10.4 本章小结 200 10.5 本章练习 201 第11章 Spring MVC 202 11.1 Spring MVC入门 202 11.1.1 Spring MVC的获取 202 11.1.2 开发第一个Spring MVC程序 203 11.2 Spring MVC映射 207 11.2.1 @RequestMapping 207 11.2.2 Ant风格 211 11.2.3 使用@PathVariable获取动态参数 212 11.2.4 REST风格 213 11.2.5 使用@RequestParam获取请求参数 215 11.3 使用Spring MVC获取特殊参数 217 11.3.1 @RequestHeader与@CookieValue 217 11.3.2 实体参数与Servlet API的使用 219 11.4 处理模型数据 221 11.4.1 使用ModelAndView处理数据 221 11.4.2 使用Map、ModelMap、Model作为方法的参数处理数据 222 11.4.3 使用@SessionAttributes注解处理数据 223 11.4.4 使用@ModelAttribute注解处理数据 224 11.5 本章小结 227 11.6 本章练习 228 第12章 视图与表单 230 12.1 视图 230 12.1.1 视图组件View 230 12.1.2 视图解析器ViewResolver 231 12.2 处理静态资源 237 12.2.1 静态资源的特殊性 237 12.2.2 使用Spring MVC处理静态资源 238 12.3 处理表单数据 239 12.3.1 类型转换 239 12.3.2 格式化数据 241 12.3.3 数据校验 244 12.4 本章小结 247 12.5 本章练习 248 第13章 表单标签 250 13.1 form标签 250 13.1.1 绑定表单对象 250 13.1.2 支持所有的表单提交方式 253 13.2 表单元素 255 13.2.1 input标签、hidden标签、password标签和textarea标签 255 13.2.2 checkbox标签和checkboxes标签 255 13.2.3 radiobutton标签和radiobuttons标签 263 13.2.4 select标签 265 13.2.5 option标签和options标签 266 13.2.6 errors标签 271 13.3 本章小结 275 13.4 本章练习 276 第14章 文件上传与拦截器 277 14.1 文件上传 277 14.1.1 文件上传原理 277 14.1.2 使用Spring MVC实现文件上传案例 277 14.2 Spring MVC拦截器 279 14.2.1 拦截器简介 279 14.2.2 拦截器的使用步骤 280 14.2.3 拦截器的拦截配置 281 14.3 使用Spring MVC整合JSON 282 14.4 本章小结 284 14.5 本章练习 284 第15章 异常处理与Spring MVC处理流程 286 15.1 异常处理 286 15.1.1 ExceptionHandlerExceptionResolver 286 15.1.2 ResponseStatusExceptionResolver 289 15.1.3 DefaultHandlerExceptionResolver 291 15.1.4 SimpleMappingExceptionResolver 292 15.2 Spring MVC执行流程 294 15.2.1 Spring MVC核心对象 294 15.2.2 Spring MVC处理流程 295 15.3 本章小结 298 15.4 本章练习 299 第16章 SSM整合与Maven 300 16.1 SSM整合 300 16.1.1 SSM整合的基本步骤 300 16.1.2 优化SSM整合 305 16.2 Maven 307 16.2.1 Maven的安装 307 16.2.2 开发第一个Maven项目 308 16.2.3 使用Maven重构SSM项目 313 16.3 本章小结 319 16.4 本章练习 319 第17章 微服务 321 17.1 Spring Boot 321 17.1.1 Spring Boot基础 322 17.1.2 使用Spring Boot开发Web应用 332 17.2 Spring Cloud 337 17.2.1 微服务概述 337 17.2.2 Spring Cloud生态概述 338 17.2.3 使用Spring Cloud构建微服务项目 339 17.3 本章小结 349 17.4 本章练习 350 附录A 部分练习参考答案及解析 351 参考文献 361