【Mybatis-plus-join】 多对多查询映射

Metadata

title: 【Mybatis-plus-join】 多对多查询映射
date: 2023-01-22 19:36
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/Mybatis-plus-join
categories:
  - Mybatis-plus-join
keywords:
  - Mybatis-plus-join
description: 【Mybatis-plus-join】 多对多查询映射

【Mybatis-plus-join】 多对多查询映射

JoinLambdaWrapper<UsersAge> wrapper = joinLambdaQueryWrapper(UsersAge.class);

wrapper.leftJoin(Users.class, Users::getAgeId, UsersAge::getId)
              // manyToManySelect 多对多,对应的就是 mybatis中的resultMap中的collection标签
              // 该方法第一个参数代表的是需要映射到的实体类字段
        // 第二个参数代表list中的实体类型 例如 List<Users> 这里的实体类型就是Users
              // 第三个就是要查询的字段
        .manyToManySelect(UsersAgesVo::getUsersList, Users.class, (cb) -> {
              // 在1.3.2版本后 属性名和映射vo的属性名相同的情况下,可以不必写别名,就可以完成自动映射
           cb.add(Users::getUserName, Users::getUserId, Users::getCreateTime);
         })
                 // 1.3.3版本之后可以 这样子查询这个类的所有查询字段并赋值到集合对象中
            .manyToManySelect(UsersAgesVo::getUsersList,Users.class)
  .end();
return super.joinList(wrapper, UsersAgesVo.class);

sql

SELECT 		   
 users_age.age_doc,users_age.age_name,users_age.id,users.user_name,users.user_id,users.create_time
FROM users_age AS users_age
    LEFT JOIN users AS users ON users.age_id = users_age.id;

返回数据

[
  {"ageDoc":"90","ageName":"90","id":1,
   "usersList":[
     {"createTime":1635416270000,"userId":1,"userName":"名字啊"},
     {"createTime":1635416270000,"userId":2,"userName":"名字2"}
   ]
  }
]