文章目录
  1. 1. MyBatis 介绍
  2. 2. MyBatis 架构
  3. 3. MyBatis 开发步骤
  4. 4. 开发优化
    1. 4.1. 1. 添加插件和依赖
    2. 4.2. 2. 添加 MBG 生成代码的配置文件
    3. 4.3. 3. 生成代码
  5. 5. 参考链接

MyBatis 介绍

MyBatis 本是 apache 的一个开源项目 iBatis,2010年这个项目由 apache software foundation 迁移到了google code,并且改名为 MyBatis 。MyBatis 是一个基于 Java 的持久层框架。iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)。

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis 架构

我们把 MyBatis 的功能架构分为三层:

  1. API 接口层:提供给外部使用的接口 API,开发人员通过这些本地 API 来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  2. 数据处理层:负责具体的 SQL 查找、SQL 解析、SQL 执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  3. 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

    MyBatis 功能架构图:

    mybatis_arch

    MyBatis 的框架架构图:

    mybatis_base_arch

    MyBatis 应用程序根据 XML 配置文件创建 SqlSessionFactory,SqlSessionFactory 根据配置(配置来源于两个地方:配置文件和代码注解)获取一个SqlSession。SqlSession 包含了执行 SQL 所需要的所有方法,可以通过 SqlSession 实例直接运行映射的 SQL 语句,完成对数据的增删改查和事务提交等,用完之后关闭 SqlSession。

MyBatis 开发步骤

  1. 添加依赖

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>x.x.x</version>
    </dependency>
  2. 创建数据库表并配置数据库连接

  3. 创建 Model 和 DAO 接口
  4. 实现 DAO 接口
    配置文件注意
    A. namespace 必须对应完整包路径下的类
    B. id 必须与 DAO 接口中的方法名相同
  5. MyBatis 和 Spring 的整合
  6. 编写 MyBatis 配置文件

开发优化

在使用 MyBatis 开发过程中,发现创建 Model 和 DAO 有很多工作比较机械切话费较多开发时间。MyBatis 也发现了这个问题,MBG(MyBatis Generator)因此诞生了。

MBG 使用步骤:

1. 添加插件和依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>

<build>
<finalName>mybatis_generator</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
</plugin>
</plugins>
</build>

2. 添加 MBG 生成代码的配置文件

generatorConfig.xml 文件配置一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
      <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
<properties resource="jdbc.properties" />

<classPathEntry
location="/Users/[who am i]/.m2/repository/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar"/>

<context id="mysqlTables" targetRuntime="MyBatis3">
<!-- 生成的pojo,将implements Serializable-->
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>

<!-- 数据库链接URL、用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driverClassName}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>

<!--
默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>

<!--
生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,
也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下
-->
<javaModelGenerator targetPackage="com.ihongqiqu.entity" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>

<!--对应的mapper.xml文件 -->
<sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>

<!-- 对应的Mapper接口类文件 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.ihongqiqu.dao" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>

<!-- 列出要生成代码的所有表,这里配置的是不生成Example文件 -->
<table tableName="UserInfo" domainObjectName="UserInfoPO"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
</table>
</context>
</generatorConfiguration>

上面配置用到 jdbc.properties,代码如下:

1
2
3
4
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jdorg
jdbc.username=root
jdbc.password=

3. 生成代码

点击 Maven 下的 mybatis-generator:generate ,然后就可以看到生成的 XXXPOMapper.xml、XXXPO.java、XXXPOMapper.java 三个文件了。

上面三个步骤,核心是第二个配置文件。我们可以在 generatorConfig.xml 配置相关的参数,代码中有注释,这里不在细说。

参考链接

  1. MyBatis 官方文档: http://www.mybatis.org/mybatis-3/zh/index.html
  2. MyBatis generator 文档:http://generator.sturgeon.mopaas.com/index.html


本文地址 http://94275.cn/2017/01/22/mybatis/ 作者为 Zhenguo

author:Zhenguo
Author: Zhenguo      Blog: 94275.cn/     Email: jinzhenguo1990@gmail.com
I have almost 13 years of application development experience and have a keen interested in the latest emerging technologies. I use my spare time to turn my experience, ideas and love for IT tech into informative articles, tutorials and more in hope to help others and learn more.
文章目录
  1. 1. MyBatis 介绍
  2. 2. MyBatis 架构
  3. 3. MyBatis 开发步骤
  4. 4. 开发优化
    1. 4.1. 1. 添加插件和依赖
    2. 4.2. 2. 添加 MBG 生成代码的配置文件
    3. 4.3. 3. 生成代码
  5. 5. 参考链接
返回顶部