QueryWrapper多表联查分页、IPage分页(解决IPage+ QueryWrapper 多表联查、条件搜素、模糊匹配的分页问题)

参考:https://blog.csdn.net/weixin_44684812/article/details/122240662
QueryWrapper多表联查分页、IPage分页
解决IPage+ QueryWrapper 多表联查、条件搜素、模糊匹配的分页问题

解决IPage+ QueryWrapper 多表联查、条件搜素、模糊匹配的分页问题
假如我们有一张user表,和一张department表 (关联关系表)
要通过department(模糊匹配)到所有的user并且分页
实体类

@ApiModel(description = "用户")
public class User {

    @ApiModelProperty(value = "主键")
    private Integer id;

    @ApiModelProperty(value = "用户名")
    private String username;

    @ApiModelProperty(value = "外键")
    private Integer departmentId;
    }

@ApiModel(description = “部门”)

public class User {

    @ApiModelProperty(value = "主键")
    private Integer id;

    @ApiModelProperty(value = "部门名称")
    private String departmentName;

controller

@PostMapping("/user")
@ApiOperation("用户条件查询")
public ApiResponse<User> selectUser(@RequestBody Map<String, Object> queryMap) {
    try {
        return ApiResponse.ofSuccess(UserService.selectUser(queryMap));
    } catch (Exception e) {
        log.error("查询失败", e);
        return ApiResponse.ofError("查询查询失败");
    }
}

service
注意 返回值为IPage
IPage selectUser(Map<String, Object> queryMap);
Impl
user 为主表,正常使用QueryWrapper 查询即可
department 为关联表,字段名必须和xml中对应

 @Override
    public IPage<TcmcAlarm> eqAllAlarm(Map<String, Object> params) {
       // size 每页多少条
        long size = Long.parseLong(StringUtils.defaultIfBlank(String.valueOf(params.get("limit")), "10"));
        // 当前页
        long current = Long.parseLong(StringUtils.defaultIfBlank(String.valueOf(params.get("page")), "1"));
        }
        // 定义 QueryWrapper 
        QueryWrapper<TcmcAlarm> q = new QueryWrapper<>();
        // 用户名(主表)
        Object userName = params.get("userName");
        // 部门名称
        Object alarmType = params.get("departmentName");
        // 用户名模糊查询(常规查询)
         if (null != userName && userName.toString().trim().length() > 0) {
            q.lambda().like(User::getUserName(), userName);
        }
        // 联接表 
        if(null != departmentName && departmentName.toString().trim().length() > 0){
         q.eq("dt.department_name", departmentName);
        }
        IPage<TcmcAlarm> page = baseMapper.selectUserpage(
                new Page<>(current, size), q);
        return page;

department.department_name
dt 表名,department_name 表字段
重写selectUserpage
常规操作中 ServiceImpl 封装了很多方法我们可以直接使用,其中就有分页,但是牵扯到复杂查询时我们尽量选择重写(如下)
Impl
mapper
重写的mapper
IPage selectUserpage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
xml

   <select id="selectUserpage" resultType="XXX.user">
        SELECT
        us.id id,
		us.username username
        dt.department_name departmentName
        FROM
        user us
        LEFT JOIN department dt ON dt .id = us.departmentId
            ${ew.customSqlSegment}
    </select>

${ew.customSqlSegment}相当于一个占位符,后续当你在mp的条件构造器中加入条件,mp的底层就会根据条件自动的在这个占位符处进行条件的拼接
最终sql

  SELECT
        us.id id,
		us.username username
        dt.department_name departmentName
        FROM
        user us
        LEFT JOIN department dt ON dt .id = us.departmentId
        where 
        dt.dt.department_name = "XX"

QueryWrapper条件查询
QueryWrapperLambdaQueryWrapper-(条件查询)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QueryWrapper联查分页是解决使用Mybatis-Plus框架进行条件查询和分页的一种方法。通过使用QueryWrapper类,可以方便地构建复杂的查询条件,并且支持多联查。在查询时,可以使用Lambda达式来指定查询条件,以实现更加灵活和简洁的查询代码。同时,可以使用IPage接口来实现分页查询,通过设置分页参数,可以获取指定页数的查询结果。这样可以实现在多联查的情况下,对查询结果进行分页展示和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [QueryWrapper联查分页、IPage分页(解决IPage+ QueryWrapper联查条件模糊匹配的分页问题...](https://blog.csdn.net/LF15527554599/article/details/123298014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Mybatis-Plus 多联查分页的实现代码](https://download.csdn.net/download/weixin_38548589/12758674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值