最近在阅读以前的代码时发现Mybatis的映射文件中需要写一个表的列集合,既然PO层已经定义了表对应的实体,不如根据po类的字段自动生成列集合,映射的xml中直接调用,也能保证字段的一致性,注解处理器自然成了第一选择,开撸。
新建一个自定义注解TableEntity
import java.lang.annotation.*;
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface TableEntity {
}
新建一个Person类并添加@TableEntity注解
@TableEntity
public class Person {
private int id;
private String name;
private String createTime;
}
我希望Person类在编译后新增一个columnNames()方法,返回值是该类的字段名称,并将驼峰转成下划线,如下所示
public String columnNames() {
return "id,name,create_time";
}
接下来需要我们自行编写注解处理器来生成columnNames()方法,这需要用到java抽象语法树(AST),下图为java11
直接调用会报错,需要手动引用一下,IDEA只要我们输入完整包名路径就可以帮我们自动生成引用,如下所示
新建@TableEntity的注解处理器TableEntityProcessor
新建注解处理器之前的我们需要加一个maven依赖,因为注解器在使用时需要我们在resource文件夹下的META-INF.services文件夹下,新建一个叫做javax.annotation.processing.Processor的文件,具体操作可以自行查询相关知识,引入这个依赖帮我们可以节省这一步操作
<depe