Mybatis Generator代码生成器
1 说明
Mybatis Generator是Mybatis自动代码生成工具,自动生成实体,mapper接口,xml配置文件。也可以自定扩展, 实现各种需求。
2 创建工程
通过generatorConfig.xml配置生成规则,GeneratorApplication执行生成代码。
3 使用说明
POM依赖:
<dependencies>
<!-- Mysql数据库驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.14</version>
</dependency>
<!-- 代码生成器 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.14</version>
</dependency>
<dependency>
<groupId>com.test.trade</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
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" >
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<!-- 通过type指定自定义的注释 -->
<commentGenerator type="com.mybatis.generator.custom.CustomCommentGenerator">
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://192.168.19.150:3306/trade_stock?characterEncoding=UTF-8"
userId="root"
password="654321">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="com.test.trade.stock.entity" targetProject="mybatis-generator\output">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.test.trade.stock.dao" targetProject="mybatis-generator\output">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.test.trade.stock.dao" targetProject="mybatis-generator\output">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table schema="trade_stock" tableName="t_trade_user" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="true" />
<generatedKey column="ID" sqlStatement="MySql" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table>
<table schema="trade_stock" tableName="t_trade_account" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="true" />
<generatedKey column="ID" sqlStatement="MySql" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
这里配置生成两张表信息, t_trade_user和t_trade_account, 采用自定义注释生成器, 自动生成的冗余信息过多,在commentGenerator标签中指定生成器路径。
自定义注释生成器CustomCommentGenerator:
public class CustomCommentGenerator extends DefaultCommentGenerator {
/**
* 类的头部信息注释生成
* @param topLevelClass
* @param introspectedTable
*/
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
topLevelClass.addJavaDocLine("/**");
String remarks = introspectedTable.getRemarks();
if (StringUtility.stringHasValue(remarks)) {
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
topLevelClass.addJavaDocLine(" * " + remarkLine);
}
}
topLevelClass.addJavaDocLine(" * ");
StringBuilder sb = new StringBuilder();
sb.append(" * ");
sb.append(introspectedTable.getFullyQualifiedTable());
topLevelClass.addJavaDocLine(sb.toString());
topLevelClass.addJavaDocLine(" *");
addJavadocTag(topLevelClass, false);
topLevelClass.addJavaDocLine(" */");
}
/**
* 生成类的成员变量, 也就是属性的注释
* @param field
* @param introspectedTable
* @param introspectedColumn
*/
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
field.addJavaDocLine("/**");
String remarks = introspectedColumn.getRemarks();
if (StringUtility.stringHasValue(remarks)) {
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
field.addJavaDocLine(" * " + remarkLine);
}
}
field.addJavaDocLine(" */");
}
/**
* 生成类的成员变量, 也就是属性的注释
* @param field
* @param introspectedTable
*/
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
field.addJavaDocLine("/**");
addJavadocTag(field, false);
field.addJavaDocLine(" */");
}
/**
* 生成属性对应的GETTER方法注释
* @param method
* @param introspectedTable
* @param introspectedColumn
*/
public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
method.addJavaDocLine("/**");
String remarks = introspectedColumn.getRemarks();
if (StringUtility.stringHasValue(remarks)) {
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
method.addJavaDocLine(" * " + remarkLine);
}
}
method.addJavaDocLine(" */");
}
}
将Class的头部注释, field属性注释和getter方法注释重新按规则生成。
启动类GeneratorApplication
public class GeneratorApplication {
public static void main(String[] args) {
try {
// 注意windows下, 如果targetProject输出目录要加上工程名, targetProject="mybatis-generator\output",通过MAVEN PLUGIN生成不用加工程名
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(GeneratorApplication.class.getClassLoader().getResourceAsStream("generatorConfig.xml"));
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
if(warnings.size() >0 ) {
System.out.println("Warnning Msg :");
for(String warn : warnings) {
System.out.println(warn);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
要注意路径问题, windows下可以采用绝对路径, 相对路径是在工程下面, 建议先创建好目录。
执行如果没有抛出异常, 则一般生成成功, 这里把警告信息也打印出来, 便于问题定位。
执行成功后, 会在output目录下生成代码。
4 通过MAVEN插件形式生成
除了上面的生成方式, 还可以通过MAVEN插件来生成:
需要在pom.xml下配置:
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.14</version>
</dependency>
<dependency>
<groupId>com.test.trade</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
在maven视图窗口, 执行myatis-generator:generate生成代码