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
作者
Glo6f
发布于
2024年06月18日
许可协议