1. MyBatis简介

    MyBatis本是Apache的一一个开源项目一iBatis, 2010 年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis。

    MyBatis是-一个基于Java的持久层框架。MyBatis提供的持久层框架包括SQLMaps和Data Access Objects (DAO),它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs ( Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

    目前,Java的持久层框架产品有许多,常见的有Hibermate和MyBatis。 MyBatis是一个半自动映射的框架,因为MyBatis需要手动匹配POJO、SQL 和映射关系;而Hibernate是一个全表映射的框架,只需提供POJO和映射关系即可。MyBatis 是一一个小巧、 方便、高效、简单、直接、半自动化的持久层框架; Hibermnate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。两个持久层框架各有优缺点,开发者应根据实际应用选择它们。

2. MyBatis环境的搭建

    通过https://github.com/mybatis/mybatis-3/releases下载zip文件并解压

    mybatis-3.4.5.jar是MyBatis的核心包,mybatis-3.4.5.pdf 是MyBatis的使用手册,lib 文件夹下的JAR是MyBatis的依赖包。

    在使用MyBatis框架时需要将它的核心包和依赖包引入到应用程序中。如果是Web应用,只需将核心包和依赖包复制到/WEB-INF/lib目录中。

3. MyBatis的工作原理

    (1) 读取MyBatis配置文件: mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,例如数据库连接信息。

    (2) 加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一-张表。

    (3) 构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory。

    (4) 创建会话对象:由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

    (5)  Executor 执行器: MyBatis 底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。

    (6)  MappedStatement对象:在Executor 接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。

    (7) 输入参数映射:输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。

    (8) 输出结果映射:输出结果类型可以是Map、List 等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。

4. 使用idea开发MyBatis入门程序

    通过一个实例讲解:

    ① 创建Web应用,并添加相关Jar包

    在idea中创建一个名为ch6的Web应用,将MyBatis的核心JAR包、依赖JAR包以及MySQL数据库的驱动JAR包一起复制到/WEB-INF/ib目录下。添加后的lib目录如图6.3所示。

    ② 创建日志文件

    MyBatis默认使用log4j输出日志信息,如果开发者需要查看控制台输出的SQL语句,那么需要在classpath路径下配置其日志文件。在ch6应用的src目录下创建log4j.properties文件,其内容如下:

    在日志文件中配置了全局的日志配置、MyBatis 的日志配置和控制台输出,其中MyBatis的日志配置用于将com.mybatis包下所有类的日志记录级别设置为DEBUG。该配置文件内容不需要开发者全部手写,可以从MyBatis使用手册中的Logging小节复制,然后进行简单修改。

    ③ 创建持久化类

    在src目录下创建一个名为com.mybatis.po的包,在该包中创建持久化类MyUser,注意在类中声明的属性与数据表user (的字段一致。

    MyUser的代码如下:

    ④ 创建映射文件

    在src 目录下创建一个名为com.mybatis.mapper 的包,在该包中创建映射文件UserMapper.xml。

    UserMapper.xml文件的内容如下:

    在上述映射文件中,<mapper> 元素是配置文件的根元素,它包含了一个namespace属性,该属性值通常设置为“包名+SQL映射文件名”,指定了唯一的命名空间;子元素<select>、<insert>、<update>以及 <delete>中的信息是用于执行查询、添加、修改以及删除操作的配置。在定义的SQL语句中,“#{}”表示一个古位符,相当于“?”,而“#{uid}”表示该占位符待接收参数的名称为uid。

    ⑤ 创建MyBatis的配置文件

    在src目录下创建MyBatis的核心配置文件mybatis-config.xml,在该文件中配置了数据库环境和映射文件的位置,具体内容如下:

    ⑥ 创建测试类

    在src目录下创建一个名为com.mybatis.test的包,在该包中创建MyBatisTest测试类。在测试类中首先使用输入流读取配置文件,然后根据配置信息构建SqlSessionFactory对象。接下来通过SqlSessionFactory对象创建SqlSession对象,并使用SqlSession对象的方法执行数据库操作。

    MyBatisTest测试类的代码如下:

5. MyBatis 与 Spring 的整合

    从上节测试类的代码中可以看出直接使用MyBatis框架的SqlSession访问数据库并不简便。MyBatis 框架的重点是SQL映射文件,为方便后续学习,本节讲解MyBatis与Spring的整合。在本书MyBatis的后续讲解中将使用整合后的框架进行演示。

    (1)导入相关Jar包

        实现MyBatis与Spring 的整合需要导入相关JAR包,包括MyBatis、Spring 以及其他JAR包。

        ① MyBatis框架所需的Jar包

            MyBatis框架所需的JAR包包括它的核心包和依赖包。

        ② Spring框架所需的Jar包   

            Spring 框架所需的JAR包包括它的核心模块JAR、AOP开发使用的JAR、JDBC和事务的JAR包(其中依赖包不需要再导入,因为MyBatis C提供),具体如下:

        ③ MyBatis与Spring整合的中间Jar包

            mybatis-spring- 1.3.2.jar

        ④ 数据库驱动Jar包

        ⑤ 数据源所需的Jar包

            在整合时使用的是DBCP数据源,需要准备DBCP和连接池的JAR包。

            DBCP下载

            连接池Jar包下载

    (2)在 Spring 中配置 MyBatis 工厂

        通过与Spring的整合,MyBatis 的SessionFactory交由Spring来构建,在构建时需要在Spring的配置文件中添加如下代码:

    (3)使用 Spring 管理 MyBatis 的数据操作接口

        使用Spring管理MyBatis数据操作接口的方式有多种,其中最常用、最简洁的一一种是基于MapperScannerConfigurer的整合。该方式需要在Spring的配置文件中加入以下内容:

    (4)框架整合示例

        下面通过一个实例实现 MyBatis 与 Spring 的整合,具体实现过程如下:

        ① 创建应用并导入相关的 Jar包

        创建一个名为ch6SS的Web应用,并将上节提到的的JAR导入/WEB-INF/lib目录下。

        ② 创建持久化类

        在src目录下创建一一个名为com.po的包,将第四节的持久化类复制到包中。

        ③ 创建 SQL映射文件和 MyBatis核心配置文件

        在src目录下创建一个名为com.mybatis 的包,在该包中创建MyBatis核心配置文件mybatis-config.xml和SQL映射文件UserMapper.xml。

        UserMapper.xml的代码如下:

        mybatis-config.xml的代码如下:

        ④ 创建数据访问接口

        在src目录下创建一一个名为com.dao的包,在该包中创建UserDao接口,并将接口使用@Mapper注解为Mapper,接口中的方法与SQL映射文件一致。

        UserDao接口的代码如下:

        ⑤ 创建日志文件

        在src目录下创建日志文件log4j.properties,文件内容如下:

        ⑥ 创建控制层

        在sre目录下创建一个名为com.controller的包,在包中创建UserController 类,在该类中调用数据访问接口中的方法。UserController类的代码如下:

        ⑦ 创建 Spring的配置文件

            在src目录下创建配置文件applicationContext.xml,在配置文件中配置数据源、MyBatis工厂以及Mapper代理开发等信息。

            applicationContext.xml的代码如下:

        ⑧ 创建测试类

  在com.controller包中创建测试类TestController,代码如下:

    从第6步中的UserController 类可以看出,开发者只需要进行业务处理,不需要再写SqISession对象的创建、数据库事务的处理等烦琐代码。因此,MyBatis 整合Spring 后方便了数据库访问操作,提高了开发效率。

6. 使用 MyBatis Generator 插件自动生成映射文件

    使用MyBatis Generator 插件自动生成MyBatis所需要的DAO接口、实体模型类、Mapping映射文件,这样省去了很多工夫,将生成的代码复制到项目工程中即可,把更多精力放在业务逻辑上。

    MyBatis Generator有3种常用方法自动生成代码,即命令行、Eclipse 插件和Maven插件。本节使用比较简单的方法(命令行)自动生成相关代码,具体步骤如下:

    ① 准备相关Jar包

        需要准备的JAR包是mysql-connector-java-5.1.45-binjar和mybatis-generator-core-1.3.6.jar.

    ② 创建文件目录

        在某磁盘根目录下新建-一个文件目录,例如E:\learning\sikissm\generator, 并将 mysql-connector-java-5.1.45-bin.jar 和 mybatis- generator-core-1.3.6.jar文件复制到generator 目录下。另外,在 generator 目录下创建src子目录存放生成的相关代码文件。

    ③ 创建配置文件

        在第2步创建的文件目录(D:\generator) 下 创建配置文件,例如E:\learning\sikissm\generator\generator.xml,如图所示。

        generator.xml配置文件的内容如下(具体含义见注释):

    ④ 使用命令生成代码

        打开命令提示符,进入E:\learning\sikissm\generator, 输入命令java -jar mybatis- generator-core-.3.6.jar -configfile generator.xml -overwrite,如图所示。

使用命令行生成文件

小结:

    本章首先简单介绍了 MyBatis 环境的构建与工作原理;其次详细讲解了在 idea 中如何开发 MyBatis入门程序;为了方便学习MyBatis的相关知识,最后以ch6SS应用为例介绍了MyBatis与Spring 的整合开发。对于整合后的框架,开发者不再需要编写SqlSession对象的创建、数据库事务的处理等烦琐代码,提高了开发效率。