目标
让mbg生成的Model类自带@Data注解,当然也可以是其他注解。
背景知识
1、mbg即MyBatis Generator,是mybatis的逆向工程工具,可以根据数据生成Model类、Mapper.java及xml等
2、lombok,通过@Data注解配合插件,可以省略掉setter\getter方法。
原理
mbg的Plugin接口定义了代码生成过程中的生命周期,我们实现Plugin接口或者继承PluginAdapter类可以在各个节点修改配置,使符合我们希望的结果。
步骤一:xml配置文件中增加Plugin
<generatorConfiguration>
<properties resource="generator.properties"/>
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 忽略其他代码 -->
<plugin type="com.aa.bb.LombokPlugin"/>
步骤二:自定义LombokPlugin类
public class LombokPlugin extends PluginAdapter {
FullyQualifiedJavaType mapperType = new FullyQualifiedJavaType("org.springframework.stereotype.Repository");
@Override
public boolean validate(List<String> warnings) {
return true;
}
@Override
public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
// model类阻止getter生成
return false;
}
@Override
public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
// model类阻止setter生成
return false;
}
@Override
public boolean clientGenerated(Interface interfaze, IntrospectedTable introspectedTable) {
// 给mapper.java增加注解
interfaze.addAnnotation("@Repository");
interfaze.addImportedType(mapperType);
return super.clientGenerated(interfaze, introspectedTable);
}
@Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
// model类增加@Data注解
topLevelClass.addAnnotation("@Data");
topLevelClass.addImportedType("lombok.Data");
return true;
}
}