一、简介
MyBatis Generator(MBG)是MyBatis 和iBATIS的代码生成器。它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将内省数据库表(或许多表),并将生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG寻求对简单CRUD(创建,检索,更新,删除)的大部分数据库操作产生重大影响。您仍然需要为连接查询或存储过程手动编写SQL和对象代码。
上面这个是官网的简介,简单理解就是一个代码生成器插件,MyBatis逆向工程,就是通过相应插件,自动生成MyBatis操作数据库的一些文件。
使用mybatis框架的开发方式有两种,可以通过编写xml文件或者使用注解进行开发,需要编写sql语句,mybatis官方提供逆向工程,面向的是使用xml文件的开发方式,可以针对数据库单表操作自动生成mybatis执行所需要的代码(mapper.java(接口)、mapper.xml(sql配置文件)、pojo(实体类)…),提高工作效率。
MyBatis Generator官网:http://mybatis.org/generator/
二、使用
2.1 在pom.xml中导入所需jar包依赖和插件依赖
使用mybatis逆向工程,自然少不了mybatis依赖的支持,下面是需要在工程中导入的依赖
<dependencies>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</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>
<!-- mysql数据库驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
</dependencies>
2.2 在工程resources文件夹下新建generatorConfig.xml文件
- 命名规范说明
这个配置文件是使用逆向工程必须的,命名规范一般命名为mybatis-generator.xml或者generatorConfig.xml,当然这个文件命名不是必须要求这样,但是内容是必须按照官网开发文档的规范
注意:
- 1.逆向工程的默认配置下,generatorConfig.xml文件必须放在resources文件夹下才能读取到
- generatorConfig.xml内容
配置参数详细请参考官网:http://mybatis.org/generator/configreference/xmlconfig.html
这里配置要点是:数据库连接信息、mapper映射文件生成的位置、mapper接口生成的位置、指定对应的数据库表名,至于其他的参数可根据自己的开发需求参照官网进行配置
<?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文件-->
<properties resource="mybatis/jdbcConfig.properties"></properties>
<!--mysql的本地jar包引入-->
<classPathEntry
location="D:\maven_repository\.m61\mysql\mysql-connector-java\5.1.8\mysql-connector-java-5.1.8.jar"/>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}" userId="${jdbc.user}"
password="${jdbc.password}">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成数据库表对应的实体类的位置 -->
<javaModelGenerator targetPackage="cn.poison.pojo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mybatis.mapper"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.poison.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="account"></table>
<table tableName="role"></table>
<table tableName="user"></table>
<table tableName="user_role"></table>
<!-- <table schema="" tableName="sys_user"></table>
<table schema="" tableName="sys_role"></table>
<table schema="" tableName="sys_permission"></table>
<table schema="" tableName="sys_user_role"></table>
<table schema="" tableName="sys_role_permission"></table> -->
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
注意:上面的配置文件使用了<properties>标签引入了外置properties文件,可在resources文件夹下创建jdbcConfig.properties文件,配置数据库连接信息
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/dbmybatis?useSSL=false&useUnicode=true&characterEncoding=utf8 jdbc.user=root jdbc.password=111111
2.3 运行逆向工程,生成接口代码和mapper文件
2.3.1 启动方式一:使用java代码运行逆向工程
public class GeneratorTest {
public static void main(String[] args){
try {
new GeneratorTest().generator();
} catch (Exception e) {
e.printStackTrace();
}
}
//生成器方法
public void generator() throws Exception{
List<String> warning=new ArrayList<String>();
boolean overwrite=true;
//这里特别注意一下你的generatorConfig.xml文件的位置
File configFile = new File("src\\main\\resources\\mybatis\\generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warning);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warning);
myBatisGenerator.generate(null);
}
}
2.3.2 启动方式二:添加generator的maven插件
- 步骤一:在工程下的pom.xml文件下添加插件
<build>
<plugins>
<!--mybatis逆向工程自动生成mapper插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<!--指明generatorConfig.xml文件的位置,可以不配置,默认值为src/main/resources/generatorConfig.xml-->
<configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>
<!--在控制台打印执行日志,将进度消息写进构建日志-->
<verbose>true</verbose>
<!--覆写:现有Java文件的名称与生成的文件的名称相同时,则现有Java文件将被覆盖-->
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!--添加tk.mybatis的依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
- 这里需要注意一下:
上面添加的插件在Configuration标签中配置了generator的位置信息,所以tk.mybatis的依赖也必须添加在插件下,否则报错
- 步骤二:在generatorConfig.xml文件中添加mysql本地依赖
网上有些博客说这个配置可有可无,但是我测试了下,如果在maven插件配置了generatorConfig.xml文件的位置和添加了tk.mybatis的依赖,这里的配置必不可少,否则报错,其中的原因暂时不太清楚,如果有知道原因的小伙伴,可在评论指点下
- 步骤三:直接点击maven的generator插件运行即可
2.3.3 启动方式三:其实就是简化版的启动方式二(相当于使用逆向工程默认配置)
- 步骤一:直接把generatorConfig.xml文件放在resources文件夹下(不用在配置文件中添加本地mysql的ar包)
<?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文件-->
<properties resource="mybatis/jdbcConfig.properties"></properties>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}" userId="${jdbc.user}"
password="${jdbc.password}">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成数据库表对应的实体类的位置 -->
<javaModelGenerator targetPackage="cn.poison.pojo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mybatis.mapper"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.poison.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="account"></table>
<table tableName="role"></table>
<table tableName="user"></table>
<table tableName="user_role"></table>
<!-- <table schema="" tableName="sys_user"></table>
<table schema="" tableName="sys_role"></table>
<table schema="" tableName="sys_permission"></table>
<table schema="" tableName="sys_user_role"></table>
<table schema="" tableName="sys_role_permission"></table> -->
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
- 步骤二:在pom.xml中添加maven插件
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
</plugin>
- 步骤三:点击插件运行
其实官网还有其他的启动方式,可以根据需求在参考官网进行配置,我这里介绍的是java常用的两种逆向工程的使用方式,对自己学习使用做的一个笔记,其实逆向工程可以整合SpringBoot等等一下微服务框架进行使用,主要用于简化代码,提供效率。