前言

自 2013 年起,我开始带领团队开发项目,公司此前使用的是一套深度集成的 Spring、Struts 和 Hibernate 框架,这套重量级框架显然已经不适合用在全新的项目中。当时使用的 Hibernate 还是较早的版本,在项目的业务层需要拼接大量的 SQL 和 HQL 才能进行数据库操作。综合多方面因素,我决定选择其他持久化框架进行项目开发。因为 MyBatis SQL 和代码分离的方式以及动态 SQL 的强大功能,加之其在对查询结果进行映射处理等方面具有显著优点,因此,我与 MyBatis 开始结缘。

为了提高查询效率,通常会采用物理分页,然而 MyBatis 只能支持内存分页。若想让 MyBatis 支持物理分页,只能通过基于拦截器的插件来实现。当时,已有的 MyBatis 分页插件都不适用于公司已经开发了大半的项目,因此我有了自己写一个分页插件的想法。完成后的分页插件(PageHelper)能很方便地实现对 MyBatis 查询方法的分页。后来,我在 CSDN 和开源中国的博客中分享了代码,并且详细说明了实现原理。在后续更新插件的一篇博客评论中,红薯(开源中国创始人)说:“应该把代码放到 git.oschina.net 中,放网盘很不专业哦!”因为这句话,我便踏入了开源的世界。

由于 PageHelper 分页插件有越来越多人使用,因而有很多网友通过留言、私信、邮件等方式和我讨论 MyBatis 的相关问题。为了解决网友的问题以及完善分页插件的功能,我深入学习了 MyBatis 的源码,通过不断的学习,不仅从深层次了解了各种问题的产生原因,对 MyBatis 的理解也逐渐加深。2014 年 11 月,我利用闲暇时间又开发了一个新的开源项目:MyBatis 通用 Mapper,它实现了 MyBatis 单表增、删、改、查的基本方法,能够帮助开发人员节省大量时间。

这几年来,我一直在博客上面和大家分享 MyBatis 的相关内容,在这期间和网友交流解决的问题有很多是重复的,也有很多都是基础的。现在已有的 MyBatis 学习途径提供给大家的知识,有一些比较深奥不适合初学者,有一些比较基础却不全面。为了让读者比较容易地全面掌握 MyBatis 的相关知识,这本书得以诞生,本书将通过全面完整的大量示例,让读者轻松且全面地掌握 MyBatis。

阅读准备

在开始学习之前,需要准备好如下的开发环境。

  • JDK1.6 及以上版本。

  • MyBatis 3.3.0 版本。

  • MySQL 数据库。

  • Eclipse 4 及以上版本。

  • Apache Maven 构建工具。

本书内容

全书共 11 章,每一章的具体内容如下。

第 1 章 MyBatis入门

本章先简单介绍了 MyBatis 的发展历史和特点,然后通过一步步的操作搭建了一个学习 MyBatis 的基础环境,这个开发环境也是学习后续几个章节的基础。

第 2 章 MyBatis XML方式的基本用法

本章设定了一个简单的权限控制需求,使用 MyBatis XML 方式实现了数据库中一个表的常规操作。在查询方面,通过根据主键查询和查询全部两个方法让读者在学会使用 MyBatis 查询方法的同时,还深入了解 MyBatis 返回值的设置原理。在增、删、改方面提供了大量详细的示例,这些示例覆盖了 MyBatis 基本用法的方方面面。

第 3 章 MyBatis注解方式的基本用法

虽然 XML 方式是主流,但是仍然有许多公司选择了注解方式,因此本章非常适合使用注解方式的读者。本章使用注解方式几乎实现了同 XML 方式类似的全部方法,包含许多常用注解的基本用法。对于初学者来说,即使不使用注解方式,通过本章和第 2 章的对比也可以对 MyBatis 有更深的了解。

第 4 章 MyBatis 动态 SQL

本章详细介绍了 MyBatis 最强大的动态 SQL 功能,通过丰富的示例讲解了各种动态 SQL 的用法,为动态 SQL 中可能出现的问题提供了最佳实践方案,还提供了动态 SQL 中常用的 OGNL 用法。

第 5 章 MyBatis 代码生成器

本章介绍的 MyBatis 代码生成器可以减轻基本用法中最繁重的那部分书写工作带来的压力。通过本章的学习,可以使用代码生成器快速生成大量基础的方法,让大家更专注于业务代码的开发,从枯燥的基础编码中解脱出来。

第 6 章 MyBatis 高级查询

本章介绍了 MyBatis 中的高级结果映射,包括一对一映射、一对多映射和鉴别器映射。通过循序渐进的代码示例让读者轻松地学会使用 MyBatis 中最高级的结果映射。本章还通过全面的示例讲解了存储过程的用法和类型处理器的用法。

第 7 章 MyBatis缓存配置

本章讲解了 MyBatis 缓存配置的相关内容,提供了 EhCache 缓存和 Redis 缓存的集成方法。虽然二级缓存功能强大,但是使用不当很容易产生脏数据。本章针对脏数据的产生提供了最佳解决方案,并且介绍了二级缓存适用的场景。

第 8 章 MyBatis 插件开发本章介绍了 MyBatis 强大的扩展能力,利用插件可以很方便地在运行时改变 MyBatis 的行为。通过两个插件示例让读者初窥门径,结合第 11 章的内容可以让读者开发出适合自己的插件。

第 9 章 Spring 集成 MyBatis 本章介绍了最流行的轻量级框架 Spring 集成 MyBatis 的方法,通过一步步操作从零开始配置,搭建一个基本的 Spring、Spring MVC、MyBatis 开发环境。

第10章 Spring Boot 集成 MyBatis

本章介绍了最流行的微服务框架 Spring Boot 集成 MyBatis 的方法,通过 MyBatis 官方提供的 Starter 可以很方便地进行集成。同时,本章对 Starter 中的配置做了简单的介绍,可以满足读者对 MyBatis 各项配置方面的需要。

第 11 章 MyBatis 开源项目

本章是一扇通往开源世界的大门,也是一扇通往 MyBatis 源码学习的大门。从 Git 入门到 GitHub 入门,读者可以学会使用最流行的分布式版本控制系统和源代码托管服务。通过一段代码让大家了解 MyBatis 中的一部分关键类,通过代码包讲解可以了解 MyBatis 每个包中所含的功能。最后通过 MyBatis 丰富的测试用例为读者提供更多更有用的学习内容。