mybatis-generator自動生成代碼(lombok帶註釋)

 

    最近接觸到的項目都會用到mybatis框架,會涉及到實體和表的映射,mapper以及mapper.xml的生成,mybatis-generator插件能夠根據表結構自動生成實體、mapper、mapper.xml,大大簡化了開發的工做量,現有的插件有點小缺陷,註釋沒有獲取數據庫字段的註釋(mysql爲例就是字段的comment),包括不支持lombok。java

    查閱相關資料,我這邊修改了下mybatis-generator-core-1.3.7.jar包,生成的實體取數據庫註釋,並支持lombok,廢話很少說,先看下效果。mysql

建表語句:sql

CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID', `name` varchar(50) NOT NULL COMMENT '姓名', `nick` varchar(50) NOT NULL COMMENT '暱稱', `sex` varchar(50) NOT NULL COMMENT '性別', `age` int(5) NOT NULL COMMENT '年齡', `create_time` datetime NOT NULL COMMENT '建立時間', `modify_time` datetime DEFAULT NULL COMMENT '最後修改時間', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表';

生成的實體類數據庫

package com.sicent.firm.bean; import java.util.Date; import lombok.Data; /** * t_person * @author yl.bu * @date 2019-05-30 22:01:47 */ @Data public class Person { /** * 自增ID */
    private Long id; /** * 姓名 */
    private String name; /** * 暱稱 */
    private String nick; /** * 性別 */
    private String sex; /** * 年齡 */
    private Integer age; /** * 建立時間 */
    private Date createTime; /** * 最後修改時間 */
    private Date modifyTime; }

 

下面講一下實現方式:apache

 

第一步:新建類 MyBatisPlugin 繼承 PluginAdapter,以下所示api

 

package org.mybatis.generator.plugins; import java.util.Date; import java.util.List; import org.apache.commons.lang3.time.DateFormatUtils; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.java.Field; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.Interface; import org.mybatis.generator.api.dom.java.Method; import org.mybatis.generator.api.dom.java.TopLevelClass; import org.mybatis.generator.internal.util.StringUtility; /** * @ClassName: MyBatisPlugin * @Description: mybatis-generator註釋插件 * @author buyl * @date 2019年5月30日 上午22:04:55 * @Version V1.0 */
public class MyBatisPlugin extends PluginAdapter { @Override public boolean validate(List<String> list) { return true; } @Override public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { boolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false")); System.out.println("hasLombok" + hasLombok); if (hasLombok) { // 添加domain的import
            topLevelClass.addImportedType("lombok.Data"); // 添加domain的註解
            topLevelClass.addAnnotation("@Data"); } topLevelClass.addJavaDocLine("/**"); String remarks = introspectedTable.getRemarks(); if (StringUtility.stringHasValue(remarks)) { String[] remarkLines = remarks.split(System.getProperty("line.separator")); for (String remarkLine : remarkLines) { topLevelClass.addJavaDocLine(" * " + remarkLine); } } StringBuilder sb = new StringBuilder(); sb.append(" * ").append(introspectedTable.getFullyQualifiedTable()); topLevelClass.addJavaDocLine(sb.toString()); sb.setLength(0); sb.append(" * @author ").append(System.getProperties().getProperty("user.name")); topLevelClass.addJavaDocLine(sb.toString()); sb.setLength(0); sb.append(" * @date "); sb.append(getDateString()); topLevelClass.addJavaDocLine(sb.toString()); topLevelClass.addJavaDocLine(" */"); return true; } @Override public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { field.addJavaDocLine("/**"); String remarks = introspectedColumn.getRemarks(); if (StringUtility.stringHasValue(remarks)) { String[] remarkLines = remarks.split(System.getProperty("line.separator")); for (String remarkLine : remarkLines) { field.addJavaDocLine(" * " + remarkLine); } } field.addJavaDocLine(" */"); return true; } @Override public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { // 添加Mapper的import
        interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Mapper")); // 添加Mapper的註解
        interfaze.addAnnotation("@Mapper"); return true; } @Override public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { // 不生成getter
        boolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false")); return !hasLombok; } @Override public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { // 不生成setter
        boolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false")); return !hasLombok; } protected String getDateString() { return DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"); } }

 

 

第二步:壓縮解壓工具打開mybatis-generator-core-1.3.7.jar, 拷貝第一步編譯後的class文件即MyBatisPlugin.class到org.mybatis.generator.plugins下,mybatis

懶的人可直接下載:https://download.csdn.net/download/littlelittlequie/11216644,以下圖所示:app

 

第三步:pom依賴,mybatis-generator-core-1.3.7.jar須要爲上面替換過的,若是隻能用原來的mybatis-generator-core-1.3.7.jar,只須要把第一步的java代碼拷貝一份到項目中便可(有不懂得能夠下來諮詢我)框架

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

<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.47</version>
</dependency>

 

第四步:配置generatorConfig.xmldom

<?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>

    <!-- 引入mysql-connector-java-5.1.47.jar位置 -->
    <classPathEntry location="D:/workspaces/workspace/z-mybatis-generator/lib/mysql-connector-java-5.1.47.jar" />

    <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <plugin type="org.mybatis.generator.plugins.MyBatisPlugin" >
            <property name="hasLombok" value="true"/>
        </plugin>
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        

        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/test" userId="root" password="123456">
        </jdbcConnection>

        <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer true,把JDBC DECIMAL 和 NUMERIC 類型解析爲java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 生成model模型,對應的包路徑,以及文件存放路徑(targetProject),targetProject能夠指定具體的路徑 也能夠使用「MAVEN」來自動生成,這樣生成的代碼會在target/generatord-source目錄下 -->
        <javaModelGenerator targetPackage="com.sicent.firm.bean" targetProject="z-mybatis-generator">
            <property name="enableSubPackages" value="true" />
            <!-- 從數據庫返回的值被清理先後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--對應的mapper.xml文件 -->
        <sqlMapGenerator targetPackage="com.sicent.firm.dao" targetProject="z-mybatis-generator">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 對應的Mapper接口類文件 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.sicent.firm.dao" targetProject="z-mybatis-generator">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <table tableName="t_person" domainObjectName="Person" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="false"/>
            </table>
    </context>
</generatorConfiguration>

 

關鍵的地方就是配置插件:

 
<plugin type="org.mybatis.generator.plugins.MyBatisPlugin" >
        <property name="hasLombok" value="true"/>
    </plugin>
 
 

第五步:執行命令   java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml -overwrite

              或者eclipse或者idea安裝mybatis-generator插件運行

 

插件安裝以及其餘涉及到的我就不詳細講了,有問題可隨時找我。

相關文章
相關標籤/搜索