——从Mybatis到Hibernate、Spring data JPA,再到QueryDSL,用过了这些框架后,对各种框架的毛病已不胜其烦。在看到Mybatis Plus这样的框架后,突发奇想,不如自己使用mybatis 定制一个数据库持久层框架,实现SQL语句的自动生成。
一个Mybatis增强工具包。新增了5种SQL语句自动生成注解:ExecuteInsert, ExecuteSelect, ExecuteCount, ExecuteUpdate, ExecuteDelete。 实现了增删改查语句自动生成。
特点
- 自动按需关联表。自动收集实体类中声明的关联表、以及方法签名中的参数注解声明的关联表,根据查询参数引用到的关联表、及查询结果视图中 用到的关联表,自动对用到的表进行Join。支持左连接,内连接,右连接。
- 查询结果支持视图,类似于Jackson Json中的JsonView,可在ExecuteSelect注解中声明查询结果的视图。生成的语句会根据查询结果视图中的字段引用 的表,自动进行Join。如果视图中包含1对1、1对多的关联属性,自动通过二次查询设置属性值。
- 支持拦截器对Mapper中方法的参数进行修改,以及添加额外的过滤条件和插入值(或更新值)。
- 支持默认过滤条件、默认插入值(或更新值)、默认排序。具体参考ExecuteInsert等语句自动生成注解。
实现思路
MybatisGenerator在监听到ContextRefreshedEvent事件后,在所有已注入的扩展了BaseMapper或EmptyMapper的Mapper中查找使用ExecuteInsert等 注解标注的方法,生成动态SqlSource,注册MappedStatement。
快速开始
插入
ExecuteInsert方法严格限定只能声明1个参数,可以是单个实例,也可以是集合类型(List或数组)。参数类型可以是实体类型、Map类型及任意的java bean类型。生成插入语句时 根据实体类字段名查找参数中的同名字段进行插入。
插入实体类实例:
@ExecuteInsertint insert(Entity entity);
插入数组:
@ExecuteInsertint insertArray(T[] array);
插入列表(使用默认插入值):
@ExecuteInsert(columnValue = {@ColumnValue(field = "updateTime