简介:
项目使用的数据库对应实体类,dao,mapper.xml文件非常多,而且手写包含了大量的get,set,toString等方法。
generator:减少了大量的dao层工作量
lombok:减少了实体类的get,set等方法,使实体类更加简洁,增加了对应数据库的注释字段。
idea安装lombok插件
ctrl+alt+s 或 File -> Settings -> 搜索Plugins
然后搜索lombok,点installed
maven文件引入generatro包
<!--mybatis生成工具generatro-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
maven文件引入插件
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
编写LombokPlugin插件
下列文件可放在任意文件夹,package路径不对不影响
package org.mybatis.generator.plugins;
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.Interface;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.internal.util.StringUtility;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class LombokPlugin extends PluginAdapter {
@Override
public boolean validate(List<String> list) {
return true;
}
@Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
//添加Entity的import
topLevelClass.addImportedType("lombok.Data");
topLevelClass.addImportedType("lombok.ToString");
topLevelClass.addImportedType("lombok.Builder");
topLevelClass.addImportedType("lombok.NoArgsConstructor");
topLevelClass.addImportedType("lombok.AllArgsConstructor");
//添加Entity的注解
topLevelClass.addAnnotation("@Data");//相当于get,set方法
topLevelClass.addAnnotation("@ToString");//toString方法
topLevelClass.addAnnotation("@Builder");//使用builder模式创建对象
topLevelClass.addAnnotation("@NoArgsConstructor");//无参构造
topLevelClass.addAnnotation("@AllArgsConstructor");//全部参数构造
//添加domain的注释
topLevelClass.addJavaDocLine("/**\n" +
" * 作者:Haibo.Liu\n" +
" * QQ:836915746\n" +
" * 日期:" + date2Str(new Date()) + "\n" +
" * 描述:\n" +
" */");
return true;
}
//Mapper文件的注释
@Override
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
interfaze.addJavaDocLine("/**\n" +
" * 作者:Haibo.Liu\n" +
" * QQ:836915746\n" +
" * 日期:" + date2Str(new Date()) + "\n" +
" * 描述:\n" +
" */");
return true;
}
//Entity字段注释
@Override
public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
String remarks = introspectedColumn.getRemarks();
if (StringUtility.stringHasValue(remarks)) {
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
field.addJavaDocLine("//" + remarkLine);
}
}
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;
}
private String date2Str(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
}
选择文件,然后执行build -> Recompile 'LombokPlugin.java'
执行完,就可以在target里找到编译好的class文件了,复制class文件到你使用的generator.jar里
这里我使用的是1.3.5版本,用压缩软件打开仓库里的mybatis-generator-core-1.3.5.jar
依次进入目录:org.mybatis.generator.plugins
将LombokPlugin.class文件粘贴到这里
配置generatorConfig.xml文件
xml文件默认路径为resources文件夹下的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>
<!-- 数据库驱动包位置 **************************************** -->
<!--<classPathEntry location="C:/Users/83691/.m2/repository/mysql/mysql-connector-java/8.0.12/mysql-connector-java-8.0.15.jar" />-->
<classPathEntry location="D:\mysql-connector-java-8.0.12.jar"/>
<context id="context1" targetRuntime="MyBatis3">
<property name="javaFileEncoding" value="UTF-8"/> <!-- 解决注释乱码问题 -->
<!-- 解决分页问题插件地址 包名.类名 不要.java后缀 -->
<!-- <plugin type="MpGenerator.MapperPlugin"></plugin> -->
<!--<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>-->
<plugin type="org.mybatis.generator.plugins.LombokPlugin">
<property name="hasLombok" value="true"/>
</plugin>
<!-- 去除自动生成的注释 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 设置数据库连接 ****************************** -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/db_name?characterEncoding=utf8&nullCatalogMeansCurrent=true&serverTimezone=UTC"
userId="root" password="123456"/>
<!-- 设置生成的实体类存放路径 ****************************************** -->
<javaModelGenerator targetPackage="com.h.entity" targetProject="./src/main/java">
<!-- 包是否存在 -->
<property name="enableSubPackages" value="false"/>
<!-- 生成条件 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- Mapper.xml配置文件位置 ************************************************ -->
<sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
<!-- 包是否存在 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- Mapper接口文件位置 **************************************************** -->
<javaClientGenerator targetPackage="com.h.mapper" targetProject="./src/main/java" type="XMLMAPPER">
<!-- 包是否存在 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- tableName 表名 domainObjectName 对象名 enableSelectByPrimaryKey 是否生成主键查询
enableDeleteByPrimaryKey 是否生成主键删除 schema 数据库的schema,可以使用SQL通配符匹配。如果设置了该值,生成SQL的表名会变成如schema.tableName的形式。也就是表名
delimitAllColumns 是否给标识符增加分隔符。默认false。当catalog,schema或tableName中包含空白时,默认为true。
useActualColumnNames 是否以数据表字段名命名实体属性名 generatedKey 要求insert时返回生成的key到传参对象,column字段名
、 sqlStatement需要生成的sql语言 、 该字段是否是key -->
<!--采集单张数据表-->
<!--<table tableName="ad" domainObjectName="Ad">-->
<!--<!–true采集数据库的值,false使用驼峰命名–>-->
<!--<property name="useActualColumnNames" value="true"/>-->
<!--<generatedKey column="id" sqlStatement="MySql" identity="true"/>-->
<!--</table>-->
<!--采集所有数据表-->
<table tableName="%" schema="SCOTT">
<property name="useActualColumnNames" value="true"/>
</table>
</context>
</generatorConfiguration>
然后执行generator插件即可生成相关内容
伸手党jar包链接:
链接:https://pan.baidu.com/s/1Ml2RK-5iszWbeMT5IyoC6Q
提取码:oa47