在《解读MyBatis数据库开发框架》一课中,我们了解了MyBatis的数据层技术架构。MyBatis会自动创建三类文件:一类文件是实体文件,也就是每个数据库表对应的类文件,该类文件一般存放到POJO目录下;一类文件是数据层接口文件,由业务层的业务类调用,该类文件一般存放到DAO目录;一类文件是Mapper文件,Mapper文件是XML文件,该文件是DAO接口的实现文件,该类文件一般存放到Mapper目录。
在eshop项目的src目录com.eshop包下,分别建立pojo包、dao包、mapper包。

图 1 eshop目录结构
下一步我们可以利用MyBatisGenerator插件来自动生成pojo、dao、mapper文件。MyBatis框架本身不包含MyBatisGenerator插件,因此需要从网上下载MyBatisGenerator插件。GitHub地址:
https://github.com/yundianzixun/mybatis-generator-1.35
下载后解压缩包,将下图所有的jar包复制到eshop项目WEB-INF目录下的lib目录,并刷新lib目录。
建立MyBatis代码自动生成类,该类调用MyBatis的MyBatisGenerator类来自动生成数据库操作类和XML映射文件。在eshop项目的src目录com.eshop包下新建util包,在util包下新建GeneratorUtil.java类文件(选择创建main函数)。
package com.hgzp.ebook.util;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorUtil {
public static void main(String[] args) {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
try {
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
Iterator<String> it = warnings.iterator();
while (it.hasNext())
{
System.out.println(it.next());
}
System.out.println("mapper&&pojo生成完毕");
} catch (IOException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
} catch (InvalidConfigurationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}Mybatis代码自动生成插件需要从配置文件中读取数据库的访问地址、登录账号和密码,还需要从配置文件中读取数据库的哪些表需要生成POJO类、DAO接口类和Mapper实现类,以及这些类存储到什么位置。配置文件为generatorConfig.xml,在eshop项目的根目录下新建generatorConfig.xml文件。
<?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> <!-- 数据库驱动 --> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.62.90:3306/shop?useUnicode=true&characterEncoding=utf8" userId="root" password="~123456q"> </jdbcConnection> <!-- 数据库类型与java类型转换 --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成pojo类存放位置 --> <javaModelGenerator targetPackage="com.eshop.pojo" targetProject="D:\javeworkspace\eshop\src"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="false"/> </javaModelGenerator> <!-- 生成映射文件存放位置 --> <sqlMapGenerator targetPackage="com.eshop.mapper" targetProject="D:\javeworkspace\eshop\src"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成Dao类存放位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.eshop.dao" targetProject="D:\javeworkspace\eshop\src"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 生成对应表及类名 --> <table schema="shop" tableName="category" /> <table schema="shop" tableName="goods" /> <table schema="shop" tableName="order" /> <table schema="shop" tableName="shopcart" /> <table schema="shop" tableName="shoper" /> <table schema="shop" tableName="user" /> </context> </generatorConfiguration>
注意:配置文件的数据库访问路径和相关物理路径,与数据库部署和项目路径有关,请根据数据库部署和项目路径情况修改。
配置文件中比较重要的是五个配置项:
<jdbcConnection>主要用于配置MySQL数据库的访问路径,访问账号和密码。这里需要注意的是,如果MySQL数据库采用的是utf8编码,还需要在数据库访问路径后面缀上utf8编码的设置语句。
<javaModelGenerator>主要用于配置实体文件pojo类的存放位置,targetPackage配置存放在哪个包下,targetProject配置pojo类的物理存储位置。
<sqlMapGenerator>主要用于配置mapper文件的存放位置。
<javaClientGenerator>主要用于配置doc类的存放位置。
<table>主要用于配置所连接数据库的哪些表需要自动创建类和XML映射文件。tableName配置数据库相对应的表名。schema配置对应的数据库名。
配置文件配置完成后,以Java Application方式运行GeneratorUtil类文件。GeneratorUtil类会根据配置文件内容自动创建数据库操作类和XML映射文件。

图 2 GeneratorUtil自动创建的代码文件
上图中dao包、mapper包、pojo包下面的类文件和XML文件都是由MyBatisGenerator插件自动创建的文件。