mybatis-generator自动生成代码(lombok带注释)

Posted kukudexin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis-generator自动生成代码(lombok带注释)相关的知识,希望对你有一定的参考价值。

 

    最近接触到的项目都会用到mybatis框架,会涉及到实体和表的映射,mapper以及mapper.xml的生成,mybatis-generator插件可以根据表结构自动生成实体、mapper、mapper.xml,大大简化了开发的工作量,现有的插件有点小缺陷,注释没有获取数据库字段的注释(mysql为例就是字段的comment),包括不支持lombok。

    查阅相关资料,我这边修改了下mybatis-generator-core-1.3.7.jar包,生成的实体取数据库注释,并支持lombok,废话不多说,先看下效果。

建表语句:

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 09: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;
}

 

下面讲一下实现方式:

 

第一步:新建类 MyBatisPlugin 继承 PluginAdapter,如下所示

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日 上午9:34: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) {
        // 添加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
        return false;
    }

    @Override
    public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,
            IntrospectedTable introspectedTable, ModelClassType modelClassType) {
        // 不生成setter
        return false;
    }

    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下,

懒的人可直接下载:https://download.csdn.net/download/littlelittlequie/11216045,如下图所示:

技术图片

 

第三步: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.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>

    <!-- 引入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="src/main/java">
            <property name="enableSubPackages" value="true" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--对应的mapper.xml文件 -->
        <sqlMapGenerator targetPackage="com.sicent.firm.dao" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 对应的Mapper接口类文件 -->
        <javaClientGenerator type="XMLMAPPER"  targetPackage="com.sicent.firm.dao" targetProject="src/main/java">
            <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插件运行

 

插件安装以及其他涉及到的我就不详细讲了,有问题可随时找我。

 

以上是关于mybatis-generator自动生成代码(lombok带注释)的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis-Generator自动生成代码

mybatis-generator自动生成代码插件详解

Maven mybatis-generator自动生成代码

代码演示Mybatis-Generator 扩展自定义生成

maven插件mybatis-generator自动生成代码

利用mybatis-generator自动生成代码