mybatis逆向工程常用配置
mybatis逆向工程常用配置
1.简述
网上使用mybatis-generator
的示例很多,有使用idea插件的,也有使用eclipse的,还有导入maven插件的.这里就不一一赘述了.需要的dada们可以从网上选择一个自己喜欢的方式
本文主要描述配置项
2.生成generator的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>
<!-- 导入jdbc配置文件 -->
<properties resource="mybatis-generator.properties"></properties>
<context id="mysql">
<!-- 自定义生成注释样式 -->
<commentGenerator type="com.szwl.base.config.generator.CustomCommentGenerator">
<!-- 如果你想要在自定义的注释生成器中使用配置参数,你首先需要再次传递配置参数 -->
<property name="creator" value="${creator}"/>
<property name="time_format" value="${time_format}"/>
</commentGenerator>
<jdbcConnection connectionURL="${jdbc.url}" driverClass="${jdbc.driver}" password="${jdbc.username}" userId="${jdbc.password}" />
<!-- 数据库与java类型映射 -->
<javaTypeResolver type="com.szwl.base.config.generator.CustomJavaTypeResolver"/>
<javaModelGenerator targetPackage="com.szwl.base.entity" targetProject="szwl-base-service" />
<sqlMapGenerator targetPackage="com.szwl.base.mapper" targetProject="szwl-base-service" />
<javaClientGenerator targetPackage="com.szwl.base.mapper" targetProject="szwl-base-service" type="XMLMAPPER" />
<!-- 表生成配置 -->
<table schema="" tableName="person" domainObjectName="PersonDO" mapperName="PersonMapper"
enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false">
</table>
</context>
</generatorConfiguration>
**你可能需要的properties文件参考 : **
# jdbc settings
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
# comment settings
## generator creator
creator = blaaair
time_format = yyyy-MM-dd HH:mm:ss
3.自定义注释类
package com.szwl.base.config.generator;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.InnerClass;
import org.mybatis.generator.api.dom.java.InnerEnum;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;
import org.mybatis.generator.internal.util.StringUtility;
/**
* mybatis generator 自定义注释
*
* @author blaaair
* @since 2019年5月13日 下午12:51:41
*/
public class CustomCommentGenerator implements CommentGenerator{
private Properties properties;
private Properties systemPro;
private boolean suppressDate;
private boolean suppressAllComments;
private String currentDateStr;
private String creator;
public CustomCommentGenerator() {
super();
properties = new Properties();
systemPro = System.getProperties();
suppressDate = false;
suppressAllComments = false;
/**
* 默认值
*/
currentDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());
creator = "";
}
@Override
public void addConfigurationProperties(Properties properties) {
this.properties.putAll(properties);
suppressDate = StringUtility.isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
suppressAllComments = StringUtility.isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
/**
* 自定义配置获取
*/
creator = properties.getProperty("creator");
currentDateStr = (new SimpleDateFormat(properties.getProperty("time_format"))).format(new Date());
System.out.println("properties : "+properties);
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
field.addJavaDocLine("/* "+field.getName()+" */");
}
/**
* 模型类注释
*/
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
topLevelClass.addJavaDocLine("/**");
topLevelClass.addJavaDocLine(" * "+topLevelClass.getType().getShortName());
topLevelClass.addJavaDocLine(" * @author "+creator);
topLevelClass.addJavaDocLine(" * @since "+currentDateStr);
topLevelClass.addJavaDocLine(" */");
}
/**
* get方法注释
*/
@Override
public void addGetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
method.addJavaDocLine("/**");
StringBuilder sb = new StringBuilder();
sb.append(" * ");
sb.append(introspectedColumn.getRemarks());
method.addJavaDocLine(sb.toString().replace("\n", " "));
sb.setLength(0);
sb.append(" * @return the ");
sb.append(introspectedColumn.getActualColumnName());
sb.append(" ");
sb.append(introspectedColumn.getRemarks());
method.addJavaDocLine(sb.toString().replace("\n", " "));
method.addJavaDocLine(" */");
}
/**
* set方法注释
*/
@Override
public void addSetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
method.addJavaDocLine("/**");
StringBuilder sb = new StringBuilder();
sb.append(" * ");
sb.append(introspectedColumn.getRemarks());
method.addJavaDocLine(sb.toString().replace("\n", " "));
Parameter parm = method.getParameters().get(0);
sb.setLength(0);
sb.append(" * @param ");
sb.append(parm.getName()+" the "+parm.getName()+" to set");
sb.append(" ");
sb.append(introspectedColumn.getRemarks());
method.addJavaDocLine(sb.toString().replace("\n", " "));
method.addJavaDocLine(" */");
}
/**
* java文件头注释
*/
@Override
public void addJavaFileComment(CompilationUnit compilationUnit) {
compilationUnit.addFileCommentLine("/**");
compilationUnit.addFileCommentLine(" * $Id:$");
compilationUnit.addFileCommentLine(" * Copyright 2019-2019 ShiJiaZhuang ShanZhouWangLuo Technology Company Ltd. All rights reserved.");
compilationUnit.addFileCommentLine(" */");
}
@Override
public void addComment(XmlElement xmlElement) {
return;
}
@Override
public void addRootComment(XmlElement rootElement) {
return;
}
/**
* 类注释
*/
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
innerClass.addJavaDocLine("/**");
sb.append(" * ");
sb.append(introspectedTable.getFullyQualifiedTable());
sb.append(" ");
sb.append(currentDateStr);
innerClass.addJavaDocLine(sb.toString().replace("\n", " "));
innerClass.addJavaDocLine(" */");
}
@Override
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
innerClass.addJavaDocLine("/**");
sb.append(" * ");
sb.append(" * ");
sb.append(introspectedTable.getFullyQualifiedTable());
innerClass.addJavaDocLine(sb.toString().replace("\n", " "));
sb.setLength(0);
sb.append(" * @author ");
sb.append(systemPro.getProperty("user.name"));
sb.append(" ");
sb.append(currentDateStr);
innerClass.addJavaDocLine(" */");
}
@Override
public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
return;
}
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
field.addJavaDocLine("/* "+field.getName()+" */");
}
@Override
public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
method.addJavaDocLine("/**");
method.addJavaDocLine(" * This method corresponds to the database table "+introspectedTable.getFullyQualifiedTable());
method.addJavaDocLine(" *");
method.addJavaDocLine(" * "+MergeConstants.NEW_ELEMENT_TAG+" "+currentDateStr);
method.addJavaDocLine(" */");
}
}
4.数据库类型映射
package com.szwl.base.config.generator;
import java.sql.Types;
import java.util.Date;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl;
/**
* jdbc类型与数据库类型映射
*
* @author blaaair
* @since 2019年5月13日 下午5:41:41
*/
public class CustomJavaTypeResolver extends JavaTypeResolverDefaultImpl {
public CustomJavaTypeResolver() {
super();
//把数据库的 TINYINT 映射成 Integer
super.typeMap.put(Types.TINYINT,
new JdbcTypeInformation("TINYINT", new FullyQualifiedJavaType(Integer.class.getName())));
//把数据库的 SMALLINT 映射成 Integer
super.typeMap.put(Types.SMALLINT,
new JdbcTypeInformation("SMALLINT", new FullyQualifiedJavaType(Integer.class.getName())));
//把数据库的 DECIMAL 映射成 Integer
super.typeMap.put(Types.DECIMAL,
new JdbcTypeInformation("DECIMAL", new FullyQualifiedJavaType(Long.class.getName())));
//把数据库的 TIME 映射成 Date
super.typeMap.put(Types.TIME,
new JdbcTypeInformation("TIME", new FullyQualifiedJavaType(Date.class.getName())));
//把数据库的 TIMESTAMP 映射成 Date
super.typeMap.put(Types.TIMESTAMP,
new JdbcTypeInformation("TIMESTAMP", new FullyQualifiedJavaType(Date.class.getName())));
}
}
mybatis逆向工程常用配置
https://www.blaaair.com/archives/mybatis-ni-xiang-gong-cheng-chang-yong-pei-zhi