为了账号安全,请及时绑定邮箱和手机立即绑定

多表的分页查询

我这里有两张表,user-用户表(id,name,manager_id,dept_id),department-部门表,我需要查询的数据是,人员名称,人员所在部门名称这样的信息;

实体: user,department,userVo(user,和deparment对象)

mapper:

public IPage<UserVo> selectUserVoByPage(Page<UserVo> page, @Param(Constants.WRAPPER)Wrapper<UserVo> wrapper);

mapper xml:

<select id="selectUserVoByPage" resultType="UserVo">
    select a.id as "user.id",
           a.name as "user.name",
           b.id as "department.id",
           b.name as "department.name"
    from user a
             left join department b on b.id = a.dept_id
     ${ew.customSqlSegment}
</select>

分页查询:

Page<UserVo> page1 = new Page<UserVo>(1, 5);
QueryWrapper<UserVo> userVoWrapper = Wrappers.<UserVo>query();
userVoWrapper.like("a.name", "王");
userVoWrapper.gt("a.age", 20);
userVoWrapper.like("b.name", "信息部");
IPage<UserVo> userVoIPage = userMapper.selectUserVoByPage(page1, userVoWrapper);
List<UserVo> userVoList = userVoIPage.getRecords();
userVoList.forEach(System.out::println);

返回结果:

Preparing: SELECT COUNT(1) FROM user a LEFT JOIN department b ON b.id = a.dept_id WHERE a.name LIKE ? AND a.age > ? AND b.name LIKE ? 

Parameters: %王%(String), 20(Integer), %信息部%(String)

Preparing: select a.id as "user.id", a.name as "user.name", b.id as "department.id", b.name as "department.name" from user a left join department b on b.id = a.dept_id WHERE a.name LIKE ? AND a.age > ? AND b.name LIKE ? LIMIT ?,? 

Parameters: %王%(String), 20(Integer), %信息部%(String), 0(Long), 5(Long)

UserVo(user=User(id=2, name=王天风, age=null, email=null, managerId=null, createTime=null, deptId=null, remark=null, remark3=null), department=Department(id=2, name=信息部-开发一部))


这样可以实现多表关联的分页查询,再优化下mapper里边的select查询列,和外链接多表,会更好点。

正在回答

1 回答

这查询用*是真的不好,不要学

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

多表的分页查询

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信