MybatisPlus自定义一对一一对多查询
前言 最近在做一个项目,苦于每次改数据库结构都得改一遍Mybatis的xml文件,实在是太繁琐,所以就用了MybatisPlus,但是又想用association和collection没办法只能手动写一个了 1.定义工具类 项目结构 RelationType 枚举类 标识是一对多 还是一对一 public enum RelationType { ONE_TO_ONE, ONE_TO_MANY } RelationConfig 配置类,每个service如果要实现一对一 一对多都需要创建指定的配置 // 泛型T和R,一个是原始表实体类,一个是目标表实体类 @Data public class RelationConfig<T, R> { // 一对一 或 一对多 private RelationType relationType; // 使用哪个字段作为主表的关联字段 // Function函数式编程,需要目标为T类型(原始表实体类),返回值为Serializable // 对类型为T的对象应用操作,并返回结果。结果是Serializable类型的对象 // 类似重写:Serializable apply(T t) private Function<T, Serializable> sourceId; // 使用哪个字段作为主表的注入字段 // BiConsumer函数式编程,接收两个对象但是没有返回 // 类似于:T.setZbbzTest(T) private BiConsumer<T, R> sourceSetter; // 一对多数据注入方法 private BiConsumer<T, List<R>> sourceListSetter; // 副表查询返回 // Function函数式编程,需要目标为Serializable类型,返回值为R // 类似于:id -> zbbzTestService.getById(id) private Function<Serializable, R> targetLoader; // 一对多数据加载器 private Function<Serializable, List<R>> targetListLoader; } MybatisPlusBuff 工具类,实现具体的一对一 一对多查询功能 这里要区分单条和多条,单条适用于getOne,多头适用于list查询 ...