目录
<?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 resource="generator.properties"></properties> -->
<!--指定特定数据库的jdbc驱动jar包的位置 -->
<classPathEntry
location="D:\document\eclipse_workspace\local_repository\local_repository\mysql\mysql-connector-java\5.1.18\mysql-connector-java-5.1.18.jar" />
<context id="default" targetRuntime="MyBatis3">
<!-- optional,旨在创建class时,对注释进行控制 -->
<commentGenerator type="com.autocode.MyCommentGenerator">
<property name="suppressDate" value="true" />
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--jdbc的数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql:///springmvc" userId="root"
password="123456">
</jdbcConnection>
<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制 -->
<!--forceBigDecimals属性值:
true:把数据库表中的DECIMAL和NUMBERIC类型解析为java的java.math.BigDecimal类型;
false:把数据库表中的DECIMAL和NUMBERIC类型解析为java的Integer类型。-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
targetPackage 指定生成的model生成所在的包名
targetProject 指定在该项目下所在的路径 -->
<javaModelGenerator targetPackage="com.module"
targetProject="src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false" />
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="false" />
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true" />
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false" />
</javaModelGenerator>
<!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
<sqlMapGenerator targetPackage="META-INF.mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
<javaClientGenerator targetPackage="com.dao"
targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="employee" domainObjectName="Employee"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
package com.autocoding;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.*;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;
/**
* 备注设置
* @author zq
*
*/
public class MyCommentGenerator extends DefaultCommentGenerator {
@SuppressWarnings("unused")
private Properties properties;
@SuppressWarnings("unused")
private Properties systemPro;
private boolean suppressDate;
private boolean suppressAllComments;
private String currentDateStr;
public MyCommentGenerator() {
super();
properties = new Properties();
systemPro = System.getProperties();
suppressDate = false;
suppressAllComments = false;
currentDateStr = (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(new Date());
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
field.addJavaDocLine("/**");
sb.append(" * ");
sb.append(introspectedColumn.getRemarks());
field.addJavaDocLine(sb.toString().replace("\n", " "));
field.addJavaDocLine(" */");
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
}
@Override
public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
sb.append("/**");
sb.append("\n");
sb.append(" * ");
sb.append("\n");
sb.append(" * @author zq" + "\n");
if (!suppressDate) {
sb.append(" * @since " + currentDateStr + "\n");
}
List<Parameter> parameters = method.getParameters();
for (Parameter parameter : parameters) {
sb.append(" * @param " + parameter.getName() + "\n");
}
sb.append(" * @return " + method.getReturnType());
sb.append("\n" + " */");
method.addJavaDocLine(sb.toString());
}
@Override
public void addGetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
}
@Override
public void addSetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
}
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
super.addClassComment(innerClass,introspectedTable,markAsDoNotDelete);
}
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
}
//@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
StringBuilder sb = new StringBuilder();
sb.append("/**");
sb.append("\n");
sb.append("* ");
sb.append("\n");
sb.append("* @author zq" + "\n");
if (!suppressDate) {
sb.append("* @since " + currentDateStr + "\n");
}
sb.append("* 数据表" + introspectedTable.getFullyQualifiedTableNameAtRuntime() + "映射bean,由Mybaits自动生成工具生成");
sb.append("\n" + "*/");
topLevelClass.addJavaDocLine(sb.toString());
}
@Override
public void addJavaFileComment(CompilationUnit var1){
/*if (suppressAllComments) {
return;
}*/
StringBuilder sb = new StringBuilder();
sb.append("/**");
sb.append("\n");
sb.append("* ");
sb.append("\n");
sb.append("* @author zq" + "\n");
if (!suppressDate) {
sb.append("* @since " + currentDateStr + "\n");
}
sb.append("* 数据表映射bean,由Mybaits自动生成工具生成");
sb.append("\n" + "*/");
var1.addFileCommentLine(sb.toString());
}
}
package com.autocoding;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 代码自动生成器
* @author zq
* mybatis逆向工程
*/
public class MyBatisGeneratorRun {
public static void main(String[] args) throws Exception{
MyBatisGeneratorRun app = new MyBatisGeneratorRun();
System.out.println(app.getClass().getResource("/").getPath());
app.generator();
System.out.println(System.getProperty("user.dir"));
}
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("conf/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(resourceAsStream);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//MyBatisGenerator是逆向工程的核心类
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
for(String warning:warnings){
System.out.println(warning);
}
}
}