内容简介
本书介绍了Java EE领域的两个开源框架:Spring的MVC和MyBatis。其中Spring的版本为4.2,MyBatis的版本是3.4。本书的示例建议在Tomcat 8上运行。本书重点介绍如何整合Spring MVC 4+MyBatis 3进行Java EE开发,主要包括三个部分。部分详细介绍了Spring MVC框架的用法。第二部分详细介绍了MyBatis框架的用法。第三部分重点介绍了Spring MVC4+MyBatis 3的整合,并示范开发了一个包含6个表、表之间具有复杂的关联映射关系,且业务功能也相对完善的HRM人事管理系统案例,希望让读者理论联系实际,将这两个框架真正运用到实际开发当中去。该案例采用目前流行、规范的Java EE架构,整个应用分为DAO持久层、领域对象层、业务逻辑层、控制器层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。所有代码完全基于Eclipse IDE来完成,一步步带领读者深入两个框架的核心。阅读本书之前,建议先阅读疯狂软件教育的《疯狂Java讲义》一书。本书适合有较好的Java编程基础,JSP、Servlet、JDBC基础,Spring框架基础的读者,尤其适合于对Spring MVC和MyBatis了解不够深入,或对Spring MVC+MyBatis整合开发不太熟悉的开发人员阅读。
图书目录
第1章 Java EE应用1
1.1 Java EE应用概述2
1.1.1 Java EE应用的分层模型2
1.1.2 Java EE应用的组件3
1.1.3 Java EE应用的结构和优势4
1.2 轻量级Java EE应用相关技术4
1.2.1 JSP、Servlet和JavaBean及替代技术4
1.2.2 MyBatis3及替代技术5
1.2.3 Spring4及替代技术6
1.2.4 使用开源框架的好处7
1.3 本章小结7
第2章 Spring MVC简介8
2.1 MVC思想概述9
2.1.1 传统Model1和Model29
2.1.2 MVC思想及其优势10
2.2 Struts2和Spring MVC11
2.3 开发个Spring MVC应用11
2.3.1 Spring的下载和安装11
2.3.2 Spring MVC的DispatcherServlet12
2.3.3 基于Controller接口的控制器13
示例:个Spring MVC应用13
示例:基于注解的控制器17
2.4 详解DispatcherServlet19
2.5 Spring MVC执行的流程21
2.5.1 Spring MVC应用的开发步骤22
2.5.2 Spring MVC执行的流程23
2.6 本章小结24
第3章 Spring MVC的常用注解25
3.1 @Controller注解26
示例:@Controller注解的使用26
3.2 @RequestMapping注解28
3.2.1 @RequestMapping注解28
3.2.2 请求处理方法可出现的参数类型30
3.2.3 请求处理方法可返回的类型31
3.2.4 Model和ModelAndView31
示例:Model和ModelMap的使用32
示例:ModelAndView的使用33
3.3 参数绑定注解33
3.3.1 @RequestParam注解33
示例:@RequestMapping和@RequestParam注解的使用34
3.3.2 @PathVariable注解38
3.3.3 @RequestHeader注解38
3.3.4 @CookieValue注解39
示例:@PathVariable、@RequestHeader和@CookieValue注解的使用39
3.3.5 @SessionAttributes注解41
示例:@SessionAttributes注解的使用41
3.3.6 @ModelAttribute注解42
示例:@ModelAttribute注解的使用43
3.4 信息转换49
3.4.1 HttpMessageConverter<T>接口49
3.4.2 转换JSON数据51
示例:接收JSON格式的数据51
示例:自定义HttpMessageConverter接收JSON格式的数据55
示例:返回JSON格式的数据57
示例:自定义HttpMessageConverter返回JSON格式的数据58
3.4.3 转换XML数据59
示例:接收XML格式的数据59
示例:返回XML格式的数据61
3.5 本章小结62
第4章 Spring MVC的标签库64
4.1 表单标签库65
4.1.1 form标签65
4.1.2 input标签66
示例:form和input标签的使用66
4.1.3 password标签68
4.1.4 hidden标签69
4.1.5 textarea标签69
4.1.6 checkbox标签70
示例:checkbox标签的使用70
4.1.7 checkboxes标签71
示例:checkboxes标签的使用72
4.1.8 radiobutton标签76
示例:radiobutton标签的使用76
4.1.9 radiobuttons标签77
示例:radiobuttons标签的使用77
4.1.10 select标签79
4.1.11 option标签79
4.1.12 options标签79
示例:select、option和options标签的使用80
4.1.13 errors标签83
示例:errors标签的使用84
4.2 本章小结86
第5章 Spring MVC的国际化87
5.1 Spring MVC国际化的相关知识88
5.1.1 messageSource88
5.1.2 localeResolver88
5.1.3 message标签89
5.2 AcceptHeaderLocaleResolver国际化89
示例:基于浏览器请求的国际化实现89
5.3 SessionLocaleResolver国际化92
示例:基于HttpSession的国际化实现93
5.4 CookieLocaleResolver国际化95
示例:基于Cookie的国际化实现95
5.5 本章小结96
第6章 Spring MVC的数据转换、格式化和数据校验97
6.1 数据绑定流程98
6.2 数据转换98
6.2.1 ConversionService98
6.2.2 Spring支持的转换器99
示例:使用ConversionService转换数据100
示例:使用@InitBinder添加自定义编辑器转换数据103
示例:使用WebBindingInitializer注册全局自定义编辑器转换数据103
6.2.3 多种转换器的优先顺序104
6.3 数据格式化104
示例:使用Formatter格式化数据105
示例:使用FormatterRegistrar注册Formatter107
示例:使用AnnotationFormatterFactory<A extends Annotation>格式化数据108
6.4 数据校验110
6.4.1 Spring的Validation校验框架111
示例:测试Spring的Validation校验112
6.4.2 JSR 303校验114
示例:测试JSR 303校验115
6.5 本章小结120
第7章 Spring MVC的文件上传和下载121
7.1 文件上传122
示例:Spring MVC的文件上传122
示例:使用对象接收上传文件124
7.2 文件下载125
示例:Spring MVC的文件下载125
7.3 拦截器126
7.3.1 HandlerInterceptor接口127
示例:拦截器实现用户权限验证127
7.4 本章小结131
第8章 MyBatis简介132
8.1 ORM和MyBatis133
8.1.1 对象/关系数据库映射(ORM)133
8.1.2 基本映射方式134
8.1.3 流行的ORM框架简介135
8.1.4 MyBatis概述135
8.2 MyBatis入门136
8.2.1 MyBatis下载和安装136
8.2.2 MyBatis的数据库操作137
8.3 本章小结142
第9章 MyBatis的基本用法143
9.1 MyBatis的体系结构144
9.1.1 SqlSessionFactory144
9.1.2 SqlSession144
9.2 深入MyBatis的配置文件146
9.2.1 MyBatis的配置文件结构147
9.2.2 properties属性147
9.2.3 settings设置148
9.2.4 typeAliases类型命名150
9.2.5 typeHandlers类型处理器151
9.2.6 objectFactory对象工厂152
9.2.7 environments配置环境152
9.2.8 mapper映射器154
9.3 深入Mapper XML映射文件155
9.3.1 select155
9.3.2 insert、update和delete157
9.3.3 sql158
9.3.4 参数(Parameters)159
示例:测试select、insert、update和delete操作159
9.3.5 ResultMaps163
示例:测试ResultMaps163
9.4 本章小结169
第10章 MyBatis的关联映射和动态SQL170
10.1 MyBatis的关联映射171
10.1.1 一对一171
示例:OneToOneTest171
10.1.2 一对多174
示例:OneToManyTest174
10.1.3 多对多179
示例:ManyToManyTest179
10.2 动态SQL185
示例:DynamicSQLTest185
10.2.1 if186
10.2.2 choose(when、otherwise)188
10.2.3 where190
10.2.4 set191
10.2.5 foreach192
10.2.6 bind193
10.3 本章小结194
第11章 MyBatis的事务管理和缓存机制195
11.1 MyBatis的事务管理196
11.1.1 事务的概念196
11.1.2 Transaction接口196
11.1.3 事务的配置创建和使用197
11.2 MyBatis的缓存机制201
11.2.1 一级缓存(SqlSession级别)201
示例OneLevelCacheTest201
11.2.2 二级缓存(mapper级别)204
示例:TwoLevelCacheTest204
11.3 本章小结207
第12章 MyBatis的注解配置208
12.1 常用Annotation注解209
12.2 Annotation注解的使用209
示例:测试select、insert、update和delete操作210
示例:AOneToOneTest213
示例:AOneToManyTest215
示例:AManyToManyTest216
示例:ADynamicSQLTest218
12.3 本章小结224
第13章 Spring4整合MyBatis3225
13.1 开发环境搭建226
13.2 准备所需的jar包226
13.3 准备数据库资源226
13.4 完成配置文件227
13.5 持久层功能实现229
13.6 服务层功能实现230
13.7 控制层功能实现232
13.8 jsp页面233
13.9 测试Spring4整合MyBatis3234
13.10 本章小结235
第14章 实战项目:人事管理系统236
14.1 项目简介及系统结构237
14.1.1 系统功能介绍237
14.1.2 相关技术介绍238
14.1.3 系统结构238
14.1.4 系统的功能模块239
14.2 数据表和持久化类239
14.2.1 设计数据库表239
14.2.2 设计持久化实体241
14.2.3 创建持久化实体类242
14.3 实现DAO持久层248
14.3.1 公共常量类249
14.3.2 定义DAO接口249
14.3.3 部署DAO层263
14.4 实现Service持久层264
14.4.1 业务逻辑组件的设计264
14.4.2 实现业务逻辑组件264
14.4.3 事务管理279
14.4.4 部署业务逻辑组件279
14.5 实现Web层280
14.5.1 控制器的处理顺序280
14.5.2 用户管理283
14.5.3 部门管理287
14.5.4 职位管理290
14.5.5 员工管理292
14.5.6 公告管理296
14.5.7 下载中心299
14.6 本章小结303
附录A EL表达式和JSTL标签库304
《Java EE 企业级应用开发精粹:高性能与可维护性的实践指南》 内容简介: 本书是一部深入剖析 Java EE 企业级应用开发核心技术与实践的力作。全书围绕着如何构建高性能、高可维护性、高可扩展性的现代企业级 Java 应用展开,从基础概念到高级技巧,从框架选型到架构设计,为读者提供一套系统、实用的开发解决方案。本书并非一本针对特定框架的“速成”教程,而是着重于理解背后的设计理念、核心原理以及如何在实际项目中灵活运用。 第一部分:Java EE 企业级开发基石与理念 Java EE 架构与设计模式回顾: 本部分首先简要回顾 Java EE 的核心架构,包括其分层思想、服务化理念以及各层之间的协作关系。在此基础上,深入讲解在企业级应用中至关重要的设计模式,如工厂模式、单例模式、策略模式、观察者模式、装饰器模式、门面模式、代理模式、MVC 模式等。强调这些模式如何在实际项目中提升代码的可读性、可维护性和可重用性,并通过具体的代码片段和场景分析,帮助读者理解模式的精髓与应用。 面向对象设计原则(SOLID)与高内聚低耦合: 深入阐述 SOLID 原则(单一职责、开放封闭、里氏替换、接口隔离、依赖倒置)在 Java EE 开发中的重要性,解释如何通过遵循这些原则来设计出更健壮、更易于修改和扩展的代码。重点讲解“高内聚、低耦合”的设计理念,分析其在模块化设计、服务划分以及组件之间交互中的具体体现,引导读者构建清晰、独立的业务模块。 性能调优与优化策略: 本部分聚焦于提升 Java EE 应用的性能。内容涵盖 JVM 内存管理(堆、栈、方法区)、垃圾回收机制(GC 算法、调优参数)、线程模型与并发控制(线程池、锁机制、并发集合)、数据访问性能优化(SQL 优化、缓存策略、连接池配置)以及网络通信优化(NIO、BIO 及其适用场景)。通过理论讲解与实际案例相结合,帮助开发者识别性能瓶颈并采取有效的优化措施。 安全与可靠性设计: 安全是企业级应用不可忽视的一环。本部分将深入探讨 Java EE 应用的安全体系,包括认证(Authentication)、授权(Authorization)、数据加密、输入校验、防止常见的 Web 攻击(如 SQL 注入、XSS、CSRF)等。同时,也关注应用的可靠性设计,如异常处理机制、容错策略、高可用架构(负载均衡、故障转移)以及灾难恢复方案。 第二部分:核心数据访问技术与实践 关系型数据库深度剖析与优化: 本部分将深入探讨关系型数据库在企业级应用中的地位与运用。内容涵盖 SQL 语言的精髓、数据库设计原则(范式、反范式)、索引优化策略、事务管理(ACID 特性、隔离级别)、存储过程与触发器的高级应用。同时,也会介绍不同数据库(如 MySQL, PostgreSQL, Oracle)的特性与最佳实践,帮助读者构建高效、稳定的数据存储方案。 JDBC 最佳实践与底层原理: 尽管有 ORM 框架的存在,但理解 JDBC 的工作原理仍然至关重要。本部分将讲解 JDBC 的 API 使用、连接池(如 Druid, HikariCP)的配置与调优、批量操作、预编译语句(PreparedStatement)的使用及其性能优势,并探讨 SQLException 的处理与日志记录。 ORM 框架的原理与高级应用: 本部分将不拘泥于特定 ORM 框架的语法,而是深入讲解 ORM 的核心理念,如对象-关系映射、延迟加载、懒加载、一级缓存、二级缓存、关联映射(一对一、一对多、多对多)等。通过对主流 ORM 框架(如 Hibernate, MyBatis)的原理性剖析,帮助读者理解其内部机制,从而更好地运用它们,避免常见陷阱,并进行高级配置与性能调优。将重点分析 ORM 框架在复杂查询、数据迁移、性能瓶颈诊断等方面的解决方案。 NoSQL 数据库选型与集成: 随着大数据时代的到来,NoSQL 数据库在企业级应用中的地位日益凸显。本部分将介绍不同类型的 NoSQL 数据库(键值存储、文档数据库、列族数据库、图数据库)的适用场景与技术特点。重点讲解如何根据业务需求选择合适的 NoSQL 数据库,并提供与其他 Java EE 组件集成的实践方法,如使用 Jedis 或 Lettuce 操作 Redis,使用 MongoDB Driver 操作 MongoDB 等。 第三部分:现代 Java EE 应用架构与框架生态 Spring 生态系统:核心理念与组件详解: 本部分将深入剖析 Spring 框架的核心理念,如控制反转(IoC)与依赖注入(DI)、面向切面编程(AOP)。详细讲解 Spring IoC 容器(ApplicationContext)的加载机制、Bean 的生命周期管理、Bean 的作用域等。深入剖析 Spring AOP 的实现原理、通知类型(前置、后置、环绕、异常)、切点表达式以及 AOP 在事务管理、日志记录、权限控制等场景的应用。 Spring MVC 核心原理与高级特性: 聚焦于 Spring MVC 的工作流程,包括 DispatcherServlet、HandlerMapping、Controller、ModelAndView、ViewResolver 等组件的作用。讲解请求处理的全过程,并深入探讨 RESTful API 的设计与实现、数据绑定(Binding)、数据校验(Validation)、异常处理、拦截器(Interceptor)、过滤器(Filter)等高级特性,指导读者构建清晰、高效的 Web 应用。 Spring Boot 快速开发与最佳实践: 本部分将重点讲解 Spring Boot 如何简化 Spring 应用的开发与部署。介绍 Spring Boot 的自动配置(Auto-configuration)、Starter 依赖管理、内嵌 Web 服务器(Tomcat, Jetty, Undertow)、外部化配置(Externalized Configuration)等核心特性。通过实际项目示例,演示如何快速构建、部署和监控 Spring Boot 应用,并探讨其在微服务架构中的应用。 Spring Cloud 微服务架构设计与实践: 随着企业对敏捷性、可扩展性和弹性的需求日益增长,微服务架构成为主流。本部分将系统介绍 Spring Cloud 的核心组件,如服务注册与发现(Eureka, Consul, Nacos)、服务消费(RestTemplate, Feign)、服务熔断与降级(Hystrix, Resilience4j)、API 网关(Gateway, Zuul)、配置中心(Config Server, Nacos)、分布式链路追踪(Sleuth, Zipkin)等。通过实际的微服务拆分、开发、部署和治理案例,帮助读者构建和管理复杂的微服务系统。 消息队列在企业级应用中的应用: 消息队列是实现异步通信、解耦、削峰填谷的关键技术。本部分将介绍主流消息队列(如 RabbitMQ, Kafka, ActiveMQ, RocketMQ)的设计理念、工作原理、消息模型(点对点、发布/订阅)以及各自的优劣势。重点讲解如何在 Java EE 应用中集成消息队列,实现生产者与消费者的解耦,处理高并发场景,以及构建可靠的分布式系统。 缓存技术与策略: 缓存是提升系统性能的重要手段。本部分将深入探讨本地缓存(如 Guava Cache, Caffeine)与分布式缓存(如 Redis, Memcached)的设计理念与应用场景。讲解缓存穿透、缓存击穿、缓存雪崩等问题及其解决方案,并探讨缓存一致性策略(如写穿、写回)和缓存淘汰策略。 第四部分:部署、监控与持续集成 Java EE 应用的部署策略: 本部分将介绍 Java EE 应用的不同部署模式,包括传统的 WAR/JAR 包部署、Docker 容器化部署、Kubernetes 编排部署等。讲解各种部署方式的优缺点,并提供实际的部署脚本和配置示例。 系统监控与日志管理: 详细介绍 Java EE 应用的监控体系,包括 JVM 监控(JConsole, VisualVM)、应用性能监控(APM,如 SkyWalking, Pinpoint)、日志收集与分析(ELK Stack: Elasticsearch, Logstash, Kibana; Loki, Promtail, Grafana)等。强调如何通过有效的监控和日志管理来及时发现和解决生产环境中的问题。 持续集成与持续部署(CI/CD): CI/CD 是现代软件开发的重要实践。本部分将介绍 CI/CD 的理念与流程,并讲解常用的 CI/CD 工具(如 Jenkins, GitLab CI, GitHub Actions)的使用方法。指导读者如何构建自动化的构建、测试、部署流水线,从而提升开发效率和软件质量。 本书特点: 理论与实践深度结合: 每一章节都力求在讲解理论知识的同时,提供丰富的代码示例、场景分析和最佳实践,确保读者能够学以致用。 强调原理与思想: 本书不局限于某个特定框架的API用法,而是深入剖析其背后的设计理念、工作原理和技术精髓,帮助读者建立扎实的理论基础。 系统性与全面性: 覆盖了 Java EE 企业级应用开发的各个关键环节,从基础到高级,从单体到微服务,为读者构建一个完整的知识体系。 面向问题解决: 针对企业级开发中常见的痛点和难点,提供切实可行的解决方案和优化建议。 无特定框架依赖(设计上): 虽然会引用主流框架作为示例,但本书的核心在于通用技术和设计原则,使得读者在面对不同技术选型时,也能触类旁通。 目标读者: 希望系统学习 Java EE 企业级应用开发技术的初中级开发者。 有一定 Java 开发经验,但希望深入理解企业级开发原理和架构的开发者。 希望提升应用性能、可维护性和可扩展性的资深开发者。 对微服务架构、高并发、大数据等领域感兴趣的开发者。 希望掌握现代软件开发流程(如 CI/CD)的开发团队。 通过阅读本书,读者将能够构建出更加健壮、高效、可维护和可扩展的 Java EE 企业级应用,从而在激烈的市场竞争中脱颖而出。