Mybatis-plus 自定义分页查询

本文介绍了在实际开发中如何通过自定义SQL语句来满足复杂的联表查询需求,以解决自带分页查询无法完成的场景。通过实例展示了在Service层、Mapper层如何设置接口和实现,以及在实体类中如何定义字段。同时,强调了在编写多表查询条件时需要注意表名加列名以避免歧义,并提供了具体的查询示例。
摘要由CSDN通过智能技术生成

为什么要自定义?

实际开发中需要联表查询,这需要我们自定义sql语句,因此,自带的分页查询就无法完成需求。

实现

实体类

public class UserDTO extends T_rbac_user implements Serializable {
    private static final long serialVersionUID = 2818149523126963829L;

    private String channelname;
    private String rolename;
}

Service层定义接口,并实现方法

public interface IT_rbac_userService extends IService<T_rbac_user> {
    IPage<UserDTO> SelectPage(IPage<UserDTO> page, Wrapper<UserDTO> queryWrapper);
}

@Override
public IPage<UserDTO> SelectPage(IPage<UserDTO> page, Wrapper<UserDTO> queryWrapper){
    return page.setRecords(this.baseMapper.page(page, queryWrapper));
}

Mapper 中定义接口,并mapper文件中写sql

List<UserDTO> page(@Param("page") IPage<UserDTO> page,
                   @Param(Constants.WRAPPER) Wrapper<UserDTO> queryWrapper);

这里的参数注解要注意,就这么写

<select id="page" resultType="UserDTO">
    SELECT t_rbac_user.id,t_rbac_user.account,t_rbac_user.status,            
            t_rbac_channel.channelname, t_rbac_role.rolename
    FROM t_rbac_user
    LEFT JOIN t_rbac_channel  ON t_rbac_user.channelid = t_rbac_channel.id
    LEFT JOIN t_rbac_role  on t_rbac_user.roleid = t_rbac_role.id
    <!-- 省略条件sql语句 -->
    ${ew.customSqlSegment}
</select>

这里使用了mybatis-plus的自定义的条件,这样使用时还是和单表表查询一样。
注意一个问题,由于是多表查询,写条件column时需要表名+column,否则可能会产生歧义。

实际使用

    int pageNum = paramDTO.getPageNum() > 0? paramDTO.getPageNum():1;
    int pageSize = paramDTO.getPageSize() > 0?  paramDTO.getPageSize():20;
    Page<UserDTO> page=new Page<>(pageNum,pageSize);

    QueryWrapper<UserDTO> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("t_rbac_user.status", MyConstant.USER_STATUS_ABLE);

    IPage<UserDTO> pageData = rbac_userService.SelectPage(page,queryWrapper);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值