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 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 {
@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下,
懒的人可直接下载: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 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插件运行
插件安装以及其他涉及到的我就不详细讲了,有问题可随时找我。
标签:format jar包 ref bool 映射 创建 create 没有 pass
原文地址:https://www.cnblogs.com/kukudexin/p/10947657.html