Mybatis Generator 逆向工程 POJO自定義註釋

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

1環境

JDK  --1.8

maven --3.2.5

IDEA --2008.2

springBoot  --2.0.4.RELEASE

2maven依賴

<!--generator-->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

2.2. 在src/main/resources目錄下創建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>
    <!-- 導入配置文件 -->
    <properties resource="application.properties"/>

    <!-- defaultModelType="flat" 設置複合主鍵時不單獨爲主鍵創建實體 -->
    <context id="mysql2Entity" targetRuntime="MyBatis3">

        <!--去除註釋  -->
        <commentGenerator type="com.service.MyCommentGenerator">
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <!-- 數據庫連接 -->
        <jdbcConnection
                driverClass="${spring.datasource.driver-class-name}"
                connectionURL="${spring.datasource.url}"
                userId="${spring.datasource.username}"
                password="${spring.datasource.password}">
            <property name="useInformationSchema" value="true"/>
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
            <property name="useJSR310Types" value="false"/>
        </javaTypeResolver>
        <!-- 生成POJO -->
        <javaModelGenerator targetPackage="com.spi.pojo"
                            targetProject="H:\super\super-core\super-core-spi\src\main\java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成mapper -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="H:\super\super-core\super-core-service\src\main\resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>


        <!-- 生成dao接口-->
        <javaClientGenerator targetPackage="com.service.dao"
                             targetProject="H:\super\super-core\super-core-service\src\main\java"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <table tableName="plant_quarantine_certification" domainObjectName="PlantQuarantineCertificationPO"
               enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false"/>

    </context>
</generatorConfiguration>

2.3 創建 MyCommentGenerator 類實現 CommentGenerator 從而實現自定義的 pojo、dao 的註釋

下面是代碼

package com.service;

import com.base.util.DateUtils;
import org.apache.poi.ss.usermodel.DateUtil;
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.*;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.internal.util.StringUtility;


import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.Set;


/**
 * @author: create by NiceHang
 * @version: v1.0.1
 * @date:2019/11/27 10:16
 */
public class MyCommentGenerator implements CommentGenerator,Serializable {

    private Properties properties = new Properties();
    /**
     * 抑制日期  默認false:不抑制
     */
    private boolean suppressDate = false;
    /**
     * 抑制註釋 默認false:不抑制
     */
    private boolean suppressAllComments = false;

    /**
     * 顯示數據庫comments 默認false:不顯示
     */
    private boolean addRemarkComments = false;
    /**
     * 日期格式
     */
    private SimpleDateFormat dateFormat;

    public MyCommentGenerator() {
        super();
        dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    }


    /**
     * 讀取配置文件
     *
     * @param properties
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        this.properties.putAll(properties);
        this.suppressDate = StringUtility.isTrue(properties.getProperty("suppressDate"));
        this.suppressAllComments = StringUtility.isTrue(properties.getProperty("suppressAllComments"));
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
        String dateFormatString = properties.getProperty("dateFormat");
        if (StringUtility.stringHasValue(dateFormatString)) {
            this.dateFormat = new SimpleDateFormat(dateFormatString);
        }

    }


    /**
     * 創建的數據表對應的類添加的註釋
     *
     * /**
     *  * @author: create by NiceHang
     *  * @version: v1.0.1
     *  * @date:2019/11/27 10:16
     *  *
     *
     * @param topLevelClass
     * @param introspectedTable
     */
    @Override
    public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        if (!this.suppressAllComments) {
            topLevelClass.addJavaDocLine("/**");
            topLevelClass.addJavaDocLine(" * @author create by NiceHang");
            topLevelClass.addJavaDocLine(" * @version v1.0.1 ");
            topLevelClass.addJavaDocLine(" * @Database table name is " + introspectedTable.getFullyQualifiedTable());
            topLevelClass.addJavaDocLine(" * @create " + DateUtils.getCurrDateTimeStr_CN());
            topLevelClass.addJavaDocLine(" */");
        }
    }

    /**
     * <p>生成xx.java文件(model)屬性的註釋</p>
     *
     * @param field
     * @param introspectedTable
     * @param introspectedColumn
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
        if (!this.suppressAllComments) {
            // 註釋開始的地方
            field.addJavaDocLine("/**");
            String remarks = introspectedColumn.getRemarks();
            // 開啓註釋,並且數據庫中comment有值
            if (this.addRemarkComments && StringUtility.stringHasValue(remarks)) {
                // 通過換行符分割 System.getProperty("line.separator"):換行符 ,屏蔽了 Windows和Linux的區別
                String[] remarkLines = remarks.split(System.getProperty("line.separator"));
                int length = remarkLines.length;
                // 如果有多行,就換行顯示
                for (int i = 0; i < length; i++) {
                    String remarkLine = remarkLines[i];
                    field.addJavaDocLine(" * " + remarkLine);
                }
            }
            // 註釋結束
            field.addJavaDocLine(" */");
        }
    }

    /**
     * xxxMapper接口和xxxExample類方法註解
     *
     * @param method
     * @param introspectedTable
     */
    @Override
    public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
        if (!this.suppressAllComments) {
            method.addJavaDocLine("/**");
            // TODO 註釋掉搜索名
            // method.addJavaDocLine(" * " + method.getName());
            List<Parameter> parameters = method.getParameters();
            // TODO  入參
            parameters.forEach(parameter -> method.addJavaDocLine(" * @param " + parameter.getName()));
            // TODO  出參如果有返回類型,添加@return
            String returnType = "void";
            if (!returnType.equals(method.getReturnType())) {
                method.addJavaDocLine(" * @return ");
            }
            method.addJavaDocLine(" */");
        }

    }

    /**
     * 數據庫對應實體類的Getter方法註解
     *
     * @param method
     * @param introspectedTable
     * @param introspectedColumn
     */
    @Override
    public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {

    }

    /**
     * 數據庫對應實體類的Setter方法註解
     *
     * @param method
     * @param introspectedTable
     * @param introspectedColumn
     */
    @Override
    public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {

    }

    /**
     * 生成xxMapper.XML文件的註釋
     *
     * @param xmlElement
     */
    @Override
    public void addComment(XmlElement xmlElement) {
    }

    @Override
    public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> imports) {

    }

    @Override
    public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> imports) {

    }

    @Override
    public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> imports) {

    }

    @Override
    public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> imports) {
    }

    @Override
    public void addClassAnnotation(InnerClass innerClass, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> imports) {
    }

    @Override
    public void addJavaFileComment(CompilationUnit compilationUnit) {
    }

    @Override
    public void addRootComment(XmlElement rootElement) {
    }

    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable) {

    }

    @Override
    public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {

    }

    @Override
    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {

    }

    @Override
    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {

    }
}

2.4 在generatorConfig.xml--》commentGenerator 標籤中需要置換type的指向,指向你自己的 MyCommentGenerator, 使自定義註釋生效。

<commentGenerator type="com.service.MyCommentGenerator">
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

3 創建 Generator 啓動類生成代碼

package com.service;

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 org.springframework.util.ResourceUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @author: create by NiceHang
 * @version: v1.0.1
 * @date:2019/11/27 10:57
 */
public class Generator {
    public static void main(String[] args){
        try {
            List<String> warnings = new ArrayList<>();
            String path = null;
            path = ResourceUtils.getURL("classpath:generatorConfig.xml").getPath().substring(1);
            File configFile = new File(path);
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(configFile);
            DefaultShellCallback callback = new DefaultShellCallback(true);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        } catch (Exception e) {
            //todo
            System.out.println(e);
        }

    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章