java快速集成mybatis-generator自動生成代碼

前言
MyBatis屬於一種半自動的ORM框架,所以主要的工作將是書寫Mapping映射文件,但是由於手寫映射文件很容易出錯,mybatis-gennerator插件幫我們自動生成mybatis所需要的dao、bean、mapper xml文件。

java快速集成
一、 pom文件引入mybatis-generator-core依賴

	    <!--web-->
        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
        <!-- MyBatis 生成器 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.3</version>
        </dependency>
         <!--mysql驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>

注: 前提得有數據庫驅動,這裏以mysql爲例

二、準備generatorConfig.xml (必要)和 generator.properties(非必要只爲了動態配置)

generator.properties

#數據庫配置
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/springbootdemo?characterEncoding=utf8&&useInformationSchema=true
jdbc.userId=root
jdbc.password=111111

#生成文件路徑
export.path=F:/download
#生成實體的包名
package.model=cn.common.entity
#生成mapper(dao)接口包名
package.dao=cn.common.dao
#生成sql(mapper)包名
package.sql=cn.common.mappers

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>
   <!-- 引入generator.properties-->
    <properties resource="generator.properties"/>
    <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 爲模型生成序列化方法-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- 爲生成的Java模型創建一個toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- 重寫的生成註釋方法-->
        <commentGenerator type="com.example.demo.CommentGenerator">
            <!-- 是否去除自動生成的註釋 true:是 false:否 -->
            <property name="suppressAllComments" value="true"/>
            <!-- 是否禁止顯示日期 true:是 false:否 -->
            <property name="suppressDate" value="true"/>
             <!--是否添加字段註釋 true:是 false:否-->
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <!--數據庫連接信息-->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.connectionURL}"
                        userId="${jdbc.userId}"
                        password="${jdbc.password}">
        </jdbcConnection>
        <!--targetProject 生成的地址 targetPackage生成包名-->
        <!--生成實體類-->
        <javaModelGenerator targetPackage="${package.model}" targetProject="${export.path}"/>
        <!--生成sql-->
        <sqlMapGenerator targetPackage="${package.sql}" targetProject="${export.path}"/>
        <!--生成mapper(dao)-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="${package.dao}" targetProject="${export.path}"/>

        <!--生成全部表tableName設爲%-->
        <!--默認會添加example的示例代碼 全設爲false-->
        <table tableName="%" enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
            <!--自增長ID 的獲取-->
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

三、重寫DefaultCommentGenerator類 自定義註釋

/**
 * 自定義註釋生成器
 */
public class CommentGenerator extends DefaultCommentGenerator {
    private boolean addRemarkComments ;

    /**
     * 設置用戶配置的參數
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    /**
     * 給字段添加註釋
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        //字段備註
        String remarks = introspectedColumn.getRemarks();
        //根據參數和備註信息判斷是否添加備註信息
        if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
            StringBuffer swaggerAnnotation=new StringBuffer();
            //文檔註釋開始
            field.addJavaDocLine("/**");
            //獲取數據庫字段的備註信息
            String[] remarkLines = remarks.split(System.getProperty("line.separator"));
            for (String remarkLine : remarkLines) {
                field.addJavaDocLine(" * " + remarkLine);
                swaggerAnnotation.append(' '+remarkLine+' ');
            }
            //addJavadocTag(field, false);
            //文檔註釋結束
            field.addJavaDocLine(" */");
            //swagger註解
            field.addJavaDocLine("@ApiModelProperty("+'"'+swaggerAnnotation+'"'+")");
        }
    }
 /**
     * 給實體類添加註釋
     */
    @Override
    public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        //表備註
        String remarks = introspectedTable.getRemarks();
        if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
            //文檔註釋開始
            topLevelClass.addJavaDocLine("/**");
            String[] remarkLines = remarks.split(System.getProperty("line.separator"));
            for (String remarkLine : remarkLines) {
                topLevelClass.addJavaDocLine(" * " + remarkLine);
            }
            //文檔註釋結束
            topLevelClass.addJavaDocLine(" */");
        }
    }
}

注: 類註釋的獲取需要在jdbc url後面加useInformationSchema=true,否則獲取不到類註釋

四、main方法生成代碼

 public static void main(String[] args)throws Exception {
        //MBG 執行過程中的警告信息
        List<String> warnings = new ArrayList<String>();
        //當生成的代碼重複時,覆蓋原代碼
        boolean overwrite = true;
        //讀取我們的 MBG 配置文件
        InputStream is = GeneratorCodeUtil.class.getResourceAsStream("/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //創建 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //執行生成代碼
        myBatisGenerator.generate(null);
        //輸出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }

附上目錄結構
在這裏插入圖片描述

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