1 Star 0 Fork 16

陈京 / mybatis-plus4

forked from baomidou / mybatis-plus4 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 7.36 KB
一键复制 编辑 原始数据 按行查看 历史
wanglei 提交于 2023-03-21 12:24 . 同步4.0.6版本代码

Mybatis-Plus-Logo

Born To Simplify Development

maven code style Join the chat at https://gitter.im/baomidou/mybatis-plus

规划计划

MP4

官方文档

企业版 Mybatis-Mate 高级特性

多表Join支持使用说明

1、准备2个po

@Data
@TableName(value="user")
public class User {

   @TableId("user_id")
   private Integer userId;

   @TableField("name")
   private String name;

   @TableField("age")
   private Integer age;

   @TableField("sex")
   private String sex;

   //指定这个字段和School 的id字段关联,如果不是和id字段关联可以使用targetFields属性进行关联
   @TableField(value="school_id",target = School.class)
   private Integer schoolId;

   //指定关联关系,和目标类  如果是  onetoone 则不需要指定target
   @TableField(relation = Relation.ONE_TO_MANY,target = School.class)
   List<School> schools;
}
@Data
@TableName(value="school",autoResultMap = true) //这里设置自动生成resultMap 不需要别的操作
public class School {
    @TableId
    private Integer id;

    @TableField("school_name")
    private String schoolName;

    @TableField("remark")
    private String remark;
}

2、启动join插件(不然返回结果映射会有问题,此插件动态修改resultMap)

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new JoinInterceptor());
        return interceptor;
    }

3、使用BasicJoinQueryWrapper (为po advance query预留的,不推荐开发者直接使用)

        BasicJoinQueryWrapper<User> wrapper = new BasicJoinQueryWrapper<>(User.class);
        wrapper.innerJoin(School.class);
        wrapper.eq(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"),1);
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"userId"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"name"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(School.class,"schoolName"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(School.class,"id"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(School.class,"remark"));
        mapper.selectList(wrapper);

po advance query写法 :

new User().select(User.SCHOOLID,User.USERID,User.NAME).userId().eq(1).innerJoin(School.class).orgName().like("一").select(School.ID,School.REMARK,School.SCHOOLNAME).list();

需要mybatis-plus-advance 依赖:https://gitee.com/baomidou/mybatis-plus-advance

3、使用LambdaJoinQueryWrapper

        // 如果在join后想返回主表就需要 end(主表.class)
        LambdaJoinQueryWrapper<User> wrapper = new LambdaJoinQueryWrapper<>(User.class);
        wrapper.eq(User::getSchoolId,1);
        wrapper.innerJoin(School.class).like(School::getSchoolName,"一");
        mapper.selectList(wrapper);
        // 或者
        wrapper.eq(User::getSchoolId,1)
            .innerJoin(School.class,School::getId,User::getSchoolId)
            .like(School::getSchoolName,"一");
        // 或者 这种方式不用end
        wrapper.eq(User::getSchoolId,1)
        .innerJoin(School.class,School::getId,User::getSchoolId,w -> {
            w.like(School::getSchoolName,"一");
        })

join条件扩展

  // 等于 =
  eq(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
  // 不等于 &lt;&gt;
  ne(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
  // 大于 &gt;
  gt(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
  // 大于等于 &gt;=
  ge(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
  // 小于 &lt;
  lt(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
  // 小于等于 &lt;=
  le(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
  // BETWEEN 值1 AND 值2
  between(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val1, SFunction<J2, Object> val2)
  // NOT BETWEEN 值1 AND 值2
  notBetween(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val1, SFunction<J2, Object> val2)

  eq(School::getId,User::getSchoolId)
  生成的SQL就是  school.id = user.school_id 其他同理

函数支持

改动:在query接口中添加了selectFun方法,支持用户使用函数来查询字段,目前各类wrapper实现均已支持此查询

 Children selectFun(BaseFuncEnum fun,R alias,R column)

1、po上添加接收函数返回的字段

@TableField(exist = false,funField = true) //标记数据库不存在,并且是个函数字段
private Long schoolCount;

2、各类wrapper使用

// QueryWrapper
new QueryWrapper<User>().eq("school_id",2).select("school_id").selectFun(DefaultFuncEnum.COUNT,
                "schoolCount").groupBy("school_id")

// LambdaQueryWrapper
new LambdaQueryWrapper<User>().eq(User::getSchoolId,2)
                .select(User::getSchoolId).selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount).groupBy(User::getSchoolId)

// QueryChainWrapper
QueryChainWrapper<User> wrapper = new QueryChainWrapper<User>(mapper);
wrapper.eq("school_id",2).select("school_id").selectFun(DefaultFuncEnum.COUNT,
                "schoolCount").groupBy("school_id").one()
// LambdaQueryChainWrapper
LambdaQueryChainWrapper<User> wrapper = new LambdaQueryChainWrapper<User>(mapper);
wrapper.eq(User::getSchoolId,2)              .select(User::getSchoolId).selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount).groupBy(User::getSchoolId).one()

// BasicJoinQueryWrapper
 BasicJoinQueryWrapper<User> wrapper = new BasicJoinQueryWrapper<>(User.class);
wrapper.eq(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"),2);
wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));
wrapper.selectFun(DefaultFuncEnum.COUNT,new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolCount"));
wrapper.groupBy(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));

// LambdaJoinQueryWrapper
LambdaJoinQueryWrapper<User> wrapper = new LambdaJoinQueryWrapper<>(User.class);
wrapper.eq(User::getSchoolId,2);
wrapper.select(User::getSchoolId);
wrapper.selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount);
wrapper.groupBy(User::getSchoolId);
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/haipiwa/mybatis-plus4.git
git@gitee.com:haipiwa/mybatis-plus4.git
haipiwa
mybatis-plus4
mybatis-plus4
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891