最近接触到的项目都会用到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 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;
}

下面讲一下实现方式:

第一步:新建类 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日 上午22:04:55* @Version V1.0*/
public class MyBatisPlugin extends PluginAdapter {@Overridepublic boolean validate(List<String> list) {return true;}@Overridepublic boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {boolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false"));System.out.println("hasLombok" + hasLombok);if (hasLombok) {// 添加domain的importtopLevelClass.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;}@Overridepublic 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;}@Overridepublic boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {// 添加Mapper的importinterfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Mapper"));// 添加Mapper的注解interfaze.addAnnotation("@Mapper");return true;}@Overridepublic boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,IntrospectedTable introspectedTable, ModelClassType modelClassType) {// 不生成getterboolean hasLombok = Boolean.parseBoolean(getProperties().getProperty("hasLombok", "false"));return !hasLombok;}@Overridepublic boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,IntrospectedTable introspectedTable, ModelClassType modelClassType) {// 不生成setterboolean 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下,

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

第三步: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 generatorConfigurationPUBLIC "-//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位置 --><classPathEntrylocation="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插件运行

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

转载于:https://www.cnblogs.com/kukudexin/p/10947657.html

mybatis-generator自动生成代码(lombok带注释)相关推荐

  1. mybatis generator 自动生成代码(带注释的实体类)

    使用前提: 当你开发的java 项目或新模块的数据库有N张表操作时,这时要自己写实体类.dao.SqlMapper.xml等文件,如果有多个表,就是造成时间浪费降低开发效率,所以建议使用mybatis ...

  2. SpringBoot如何自动生成实体类和Dao层以及映射文件(mybatis generator 自动生成代码)

    一.首先添加自动生成代码插件 <!-- mybatis generator 自动生成代码插件 生成时解除注释 --><plugin><groupId>org.myb ...

  3. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我 ...

  4. Mybatis(1)——Mybatis Generator自动生成代码

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  5. 使用Mybatis Generator自动生成代码

    MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器. 它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码. 它将内省数 ...

  6. maven mybatis generator自动生成代码

    利用maven插件生成mybatis的 mapper dao entity 大大减少了工作量. 我的环境 Eclipse Java EE IDE for Web Developers. Version ...

  7. Eclipse使用mybatis generator自动生成代码

    一.写在前面 Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件 ...

  8. 用mybatis的generator自动生成代码--坑我都走了一遍,后面的同学别踩了

    先说什么是mybatis-generator? mybatis-geneator是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件. 步骤一:在pom文件中添加插件配 ...

  9. IDEA使用Mybatis Generator自动生成部分代码

    IDEA使用Mybatis Generator自动生成部分代码 说明:使用Mybatis Generator代码生成配置,简单生成部分后端代码,包括(实体类,Mapper.Mapper.xml文件) ...

  10. mybatis generator自动生成sqlmap代码的不完善之处以及解决方法

    mybatis generator自动生成sqlmap代码的不完善之处以及解决方法 参考文章: (1)mybatis generator自动生成sqlmap代码的不完善之处以及解决方法 (2)http ...

最新文章

  1. python组合数等于一个值_Python如何实现随机组合结果元组重复数量不能超过某个值?...
  2. Python(3) 进制转换
  3. 直播分享|邓文彬:如何在GPU/CPU/移动端高效训练和推断CNN网络
  4. error nr.1045 access denied for user 'root'@'localhost' (using passwd:no)
  5. ACL 2019开源论文 | 基于Attention的知识图谱关系预测
  6. JWT:我应该使用哪种签名算法?
  7. JavaScript基础部分
  8. 《C程序员从校园到职场》一2.2 破除错误观念
  9. QT实现Linux下系统监控小工具
  10. ETF:一种让美国“80后”趋之若鹜的投资工具
  11. 国外知名的技术网站、社区
  12. 如何查计算机的网络速度,电脑怎么查网速?教你精准测速的方法
  13. 华中数控808系统说明书_智能制造之高端数控系统龙头
  14. bootice添加黑苹果引导_非苹果电脑,怎样在不破坏Win10的前提下,安装苹果MacOS?...
  15. Opencv—利用findContours函数找圆环,并标出(简单层级)
  16. DAVIS Driving Dataset 2020 (DDD20) 【转载】
  17. 史上最“奇葩”相亲男惊呆网友:你那么普通,却那么自信
  18. 《神经科学:探索脑》学习笔记(第5章 突触传递)
  19. 有哪些可以快速回复信息的软件
  20. 【目标检测】目标检测的评价指标(七个)

热门文章

  1. 大数据算法_大数据算法下的我们,犹如“皇帝的新衣”
  2. 【UVA10652】Board Wrapping(凸包+坐标旋转+多边形面积)
  3. 【HDU4691】Front compression(求给定两个子串/后缀的最长公共前缀---后缀数组+st表+一点思维)
  4. 【算法笔记】数论基础:康托展开(全排列和序号之间的映射)
  5. mysql 主从复制延迟_什么情况会导致MySQL主从复制延迟?
  6. java es score_elasticsearch系列(七)java定义score(示例代码)
  7. 图像空域增强:卷积运算法
  8. Alamofire拦截请求AOP,URLProtocol
  9. 异步ajax动态实现级联,JQuery异步加载无限下拉框级联功能实现示例
  10. java最终类不能派生子类_最终类不能派生子类,最终方法不能被重写 (2.0分)_学小易找答案...