什么是逆向工程
mybatis需要自己程序员编写sql语句,mybatis官方提供逆向工程,可以针对单表快速自动生成mybatis执行所需要的代码(mapper.java,mapper.xml,po类…)。在实际开发中,常用逆向工程方式,根据数据库表格生成java代码。
操作步骤
1.导包
在github上下载jar包 https://github.com/yundianzixun/mybatis-generator-1.35.并导入到工程中。
2.完成配置文件
使用java程序结合配置文件的方式完成逆向工程,这样不依赖开发工具,在所有java开发环境都可以生成。首先创建逆向工程配置文件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:起个名字 -->
<!-- targetRuntime:设置生成的文件适用于那个 mybatis 版本 -->
<context id="testTables" targetRuntime="MyBatis3">
<!--optional,指在创建class时,对注释进行控制-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--jdbc的数据库连接 wg_insert 为数据库名字-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"
userId="root"
password="admin"></jdbcConnection>
<!--非必须,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<!-- 默认情况下为false,把jdbc DECIMAL和NUMERIC类型解析为Integer,为true时,解析为java.math.BigDecimal -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetPackage:生成的实体类所在的包 -->
<!-- targetProject:生成的实体类所在的硬盘位置 -->
<javaModelGenerator targetPackage="cn.itcast.po"
targetProject=".\src">
<!-- 是否允许子包 -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对modal添加构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否清理从数据库中查询出的字符串左右两边的空白字符 -->
<property name="trimStrings" value="true"/>
<!-- 建立modal对象是否不可改变 即生成的modal对象不会有setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
<sqlMapGenerator targetPackage="cn.itcast.mapper"
targetProject=".\src">
<!-- 针对数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.itcast.mapper" targetProject=".\src">
<!-- 针对 oracle 数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--指定数据库表-->
<table tableName="items_details"/>
<table tableName="order"/>
<table tableName="orderdetail"/>
<table tableName="user"/>
</context>
</generatorConfiguration>
重点注意三处:javaModelGenerator的targetPackage为你所想生成的实体类的位置;sqlMapGenerator的targetPackage为mapper映射文件所在的位置;javaClientGenerator的targetPackage为mapper接口所在的位置。
3.执行java生成代码
运行如下java代码即可在对应位置得到所需要的mapper接口,映射配置文件以及对应po类。
@Test
public void generator() throws Exception{
List<String> warning=new ArrayList<>();
boolean overwrite=true;
//指定逆向工程配置文件
File configFile=new File("src/config/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);
}