使用Lombok工具可以在生成实体类时省掉getter/setter以及构造方法等等代码,使得代码整体更加简洁优雅。在使用MyBatis时,可以利用generator映射数据库反向生成相对应得实体类以及mapper接口和mapper.xml文件。
这实现过程的关键是需要自己继承接口自定义一个插件实现类。
准备工作:
数据库建表sql语句(这里本人用的是MySQL5.7):
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`cost` decimal(12,4) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
代码:
pom.xml文件(引入org.mybatis.generator依赖以及配置插件,这里用的是MySQL5.7版本,若是MySQL8版本,自行搜索相应的依赖)
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter 插件 -->
<!-- 需要用通用mapper时放开注释,相应地也需要在plugin以及generator.xml中放开相关注释-->
<!--<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>-->
<!-- 必须引入 生成的.class插件文件需放入里面-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--mybatis自动生成代码插件 用mysql8.0的依赖以及驱动包会报错,可以切换mysql5.8版本以下的依赖-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!-- generatorConfig.xml文件路径 ${basedir}表示项目根目录,即包含pom.xml文件的目录,是maven内置属性-->
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<!-- 是否覆盖,true表示会替换生成的JAVA文件,false则不覆盖 -->
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!-- 通用mapper依赖 假如需要使用通用mapper,放开注释 -->
<!--<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>-->
</dependencies>
</plugin>
</plugins>
</build>
继承接口自定义的插件类:
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.Interface;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class LombokPlugin extends PluginAdapter {
public LombokPlugin() {
}
public boolean validate(List<String> list) {
return true;
}
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
topLevelClass.addImportedType("lombok.Data");
topLevelClass.addAnnotation("@Data");
//topLevelClass.addImportedType("lombok.Getter");
//topLevelClass.addImportedType("lombok.Setter");
//topLevelClass.addImportedType("lombok.ToString");
//topLevelClass.addAnnotation("@Getter");
//topLevelClass.addAnnotation("@Setter");
//topLevelClass.addAnnotation("@ToString");
topLevelClass.addJavaDocLine("/**");
topLevelClass.addJavaDocLine("* Created by Mybatis Generator " + this.date2Str(new Date()));
topLevelClass.addJavaDocLine("*/");
return true;
}
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
interfaze.addJavaDocLine("/**");
interfaze.addJavaDocLine("* Created by Mybatis Generator " + this.date2Str(new Date()));
interfaze.addJavaDocLine("*/");
return true;
}
public boolean modelSetterMethodGenerate