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插件运行

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

原文地址:https://www.cnblogs.com/kukudexin/p/10947657.html

时间: 2024-09-30 11:45:55

mybatis-generator自动生成代码(lombok带注释)的相关文章

Spring 中使用 Mybatis generator 自动生成代码

Mybatis generator 是一个 Mybatis 插件,可以用于自动生成项目中需要的 pojo 类.对应的 Mapper 接口和 mapper.xml 文件.使用该插件,一方面可以节省开发时间,另一方面也避免手写时打错字的问题. 由于工作需要,我打算在原有的 Spring 项目中使用 Mybatis generator 自动生成代码,以便简化 DAO 层的开发. 闲言少叙,just do it! 1. 引入依赖 a. 父模块配置 <properties> <spring_ver

idea中mybatis generator自动生成代码配置 数据库是sqlserver

好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generatorConfig.xml and jdbc.properties都要放在resource根目录下 具体generatorConfig.xml内容如下: <?xml version="1.0" encoding="UTF-8"?>   <!DOCTYPE

SpringBoot 添加mybatis generator 自动生成代码插件

自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <

使用Mybatis Generator自动生成Mybatis相关代码

本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: Sql代码   CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); 2. 然后注入数据 Sql代码   insert into pet values('Fluffy', 'Harold',

MyBatis使用Generator自动生成代码

MyBatis中,可以使用Generator自动生成代码,包括DAO层. MODEL层 .MAPPING SQL映射文件. 第一步:下载MyBatis的Generator工具 http://mybatis.github.io/generator/ 第二步:配置自动生成代码所需的XML配置文件,例如(generator.xml) 将这个文件保存至你下载的mybatis-generator-core-1.3.2文件夹下 第三步:进入XML配置文件(generator.xml)所在的的目录并执行命令:

mybatis使用generator自动生成代码时的类型转换

使用mybatis的generator自动生成代码,但是oracle数据库中number(6,2)总是自动转成BigDecimal,我想要转成的是float类型 这样就写了一个类型转换器,需要继承JavaTypeResolver接口 然后在mybaties配置文件generatorConfig.xml中类型转换配置位置添加上即可 <javaTypeResolver type="com.generator.MyJavaTypeResolver"> <property n

使用MyBatis Generator自动创建代码

SSM框架--使用MyBatis Generator自动创建代码 目录说明 使用自动生成有很多方式,可以在eclipse中安装插件,但是以下将要介绍的这种方式我认为很轻松,最简单,不需要装插件,只需要下几个jar包即可,把它们放在一个目录下面,如下图: src文件夹:生成的资源文件的位置 generationRun.bat:自动生成 脚本 generatorConfig - 副本.xml:备份 generatorConfig.xml:配置文件 mybatis-3.2.6.jar:mybatis框

在Spring Boot中使用MyBatis并且自动生成代码,详细一看就懂

MyBatis目前是主流的数据访问层框架,我司目前的项目大部分都是用MyBatis.本文将使用Spring Boot快速创建项目,并且在Spring Boot中使用MyBatis,编写了一个根据区域id获取区域信息的接口例子.在最后,使用MyBatis的Generator自动生成代码. 0.新建Spring Boot项目 打开开发工具:IntelliJ IDEA,选择jdk 1.8以上. 点击File→New→Project...,选择Spring Initializr. 然后next: nex

Mybatis generator 逆向生成代码

Mybatis generator 逆向生成代码 简单介绍 本文介绍用mybatis逆向生成javaben dao接口 1.创建maven项目 创建相应的包 附上项目创建完成的图片 然后在pom.xml文件里面引入需要的jar的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schema