使用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版本,自行搜索相应的依赖)
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.0
org.mybatis.generator
mybatis-generator-core
1.3.7
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7
${basedir}/src/main/resources/generator/generatorConfig.xml true
true
mysql
mysql-connector-java
5.1.45
继承接口自定义的插件类:
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 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 modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
return false;
}public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
return false;
}private String date2Str(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
return sdf.format(date);
}
}
注意包名为
package org.mybatis.generator.plugins;
然后用idea工具编译成.class字节码,把编译好的class文件复制粘贴到pom文件的依赖mybatis-generator-core的plugins文件下
文章图片
文章图片
最后在generatorConfig.xml文件配置(注意各个标签的顺序)
结果:
在idea打开maven窗口点击plugins中的mybatis-generator插件
文章图片
可看到控制台输出执行成功信息:
文章图片
然后在定义的工程目录下可看到生成的实体类以及相关的mapper等:
生成的User实体类(这里的Parent为自定义的父类):
文章图片
mapper:
文章图片
对应mappper的xml文件:
文章图片
附上详细的generatorConfig.xml文件配置信息:
也可参考官网文档
也可以直接用简单的配置信息版本(也就是本案例的配置文件):
【mybatis-generator 整合lombok】本例表结构:
文章图片
推荐阅读
- 框架|Mybatis的一级缓存和二级缓存
- Mybatis日志工厂
- MyBatis的功能架构是怎样的
- Mybatis入门之CRUD
- mybatis之缓存机制
- Mybatis练习(1)
- Java|MyBatis(五)——MyBatis中的缓存机制
- mybatis之脚本解析器
- mybatis|记mybatis查询null字段导致的NPE
- Mybatis 动态查询、插入、修改操作