前言
MyBatis逆向工程需要用到的就是MyBatis官方提供的MyBatis Generator(MBG)。MBG是MyBatis和iBATIS的代码生成器,它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。MBG对简单CRUD(增删改查)的大部分数据库操作产生重大影响。但是您仍然需要为连接查询或存储过程手动编写SQL和对象代码。
准备工作
本文中使用到的一些Jar
- log4j-1.2.16.jar
- mybatis-3.2.3.jar
- mybatis-generator-core-1.3.2.jar
- mysql-connector-java-5.1.28-bin.jar
- ojdbc14.jar
环境搭建
首先看下我的工程结构吧
需要修改的几个地方
- GeneratorSqlmap.java中的path(generatorConfig.xml的位置)
- generatorConfig.xml中的数据库连接
下面是我的文件详细配置
log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
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="testTables" targetRuntime="MyBatis3">
<!--pojo生成toString-->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://192.168.211.133:3306/mydb"
userId="root"
password="root">
</jdbcConnection>
<!--
<jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@192.168.211.133:1521:mydb"
userId="root"
password="root">
</jdbcConnection>
-->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,
为 true时把JDBC DECIMAL 和 NUMERIC
类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.mybatis.pojo"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject:mapper.xml映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetPackage:mapper.java接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.mybatis.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定数据库表,生成所有的方法 -->
<!--
<table schema="" tableName="car"></table>
<table schema="" tableName="user"></table>
-->
<!--
指定生成的表,这里只生成基本的CRUD方法
tableName : 指定生成的表名, % 指生成所有的表
domainObjectName : 对应的POJO名称 (在生成单个table时使用,tableName=%时勿用)
-->
<table tableName="%" enableSelectByExample="false"
enableDeleteByExample="false"
enableCountByExample="false" enableUpdateByExample="false"
selectByExampleQueryId="false">
<!--
1> false : 按照驼峰风格生成字段
-->
<property name="useActualColumnNames" value="false"/>
<!--
2> POJO是否继承BaseEntity,BaseEntity不会自动生成,需要自己代码生成
-->
<!--<property name="rootClass" value="com.mybatis.pojo.BaseEntity" />-->
<!--
3> 生成pojo、mapper.xml时不生成某些字段,column里指的是数据库表的字段
-->
<!--
<ignoreColumn column="id"/>
<ignoreColumn column="user_name"/>
-->
<!--
4> 有些表的字段需要指定java类型
-->
<!--<columnOverride column="id" javaType="Long" />-->
<!--
5>
该元素会在根据表中列名计算对象属性名之前先重命名列名,
非常适合用于表中的列都有公用的前缀字符串的时候,
比如列名为:SYS_ID,SYS_NAME,SYS_EMAIL,SYS_ADDRESS等;
那么就可以设置searchString为"^SYS_",并使用空白替换,
那么生成的Bean对象中的属性名称就不是sysId,sysName等,
而是先被替换为ID,NAME,EMAIL,然后变成属性:id,name,email;
注意:MBG是使用java.util.regex.Matcher.replaceAll
来替换searchString和replaceString的,
如果使用了columnOverride元素,该属性无效;
-->
<!--<columnRenamingRule searchString="^SYS_" replaceString=""/>-->
</table>
</context>
</generatorConfiguration>
GeneratorSqlmap.java
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
String path ="E:\\java\\generatorSqlmapCustom\\src\\generatorConfig.xml";
//指定逆向工程配置文件
File configFile = new File(path);
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行GeneratorSqlmap.java的main方法即可~