MybatisPlus多条件查询并分页

需求

输入任意字段进行查询,如果字段为空,则忽略该字段,并分页输出。

阶段一

public Result findMulti(String name, String sex, String position, String phone, Integer department_id, Integer now_page, Integer num) {
        HashMap<String, Object> map = new HashMap<>();
        map.put("name",name);
        map.put("sex", sex);
        map.put("position", position);
        map.put("phone", phone);
        map.put("department_id", department_id);
        List<Employee> employees = employeeService.listByMap(map);
    	//这里统一了结果封装
        return Result.succ(employees);
    }

结果

无法查询。为空的字段会进行IS Null条件匹配。
在这里插入图片描述

阶段二

    public Result findMulti(String name, String sex, String position, String phone, Integer department_id, Integer now_page, Integer num) {
        HashMap<String, Object> map = new HashMap<>();
        if(name != null) map.put("name",name);
        if (sex != null) map.put("sex", sex);
        if (position != null) map.put("position", position);
        if (phone != null) map.put("phone", phone);
        if (department_id != null) map.put("department_id", department_id);
        List<Employee> employees = employeeService.listByMap(map);
        //这里统一了结果封装
        return Result.succ(employees);
    }

结果

可以根据输入的参数,如果参数为空,则忽略该参数。但是不能实现分页。
在这里插入图片描述

分页阶段一

    public Result findMulti(String name, String sex, String position, String phone, Integer department_id, Integer now_page, Integer num) {
        HashMap<String, Object> map = new HashMap<>();
        if(name != null) map.put("name",name);
        if (sex != null) map.put("sex", sex);
        if (position != null) map.put("position", position);
        if (phone != null) map.put("phone", phone);
        if (department_id != null) map.put("department_id", department_id);

        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.allEq(map);
        Page<Employee> page = new Page<>(now_page,num);
        Page<Employee> pageOut = employeeService.page(page,wrapper);
		//这里统一了结果封装
        return Result.succ(pageOut);
    }

结果

也可以实现多条件查询,自动忽略为空的字段,但还是有很多if判断语句。
在这里插入图片描述

分页阶段二

MybatisPlus官网对条件构造器allEq的说明

allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)

全部eq或个别isNull

个别参数说明:

params : key为数据库字段名,value为字段值

null2IsNull : 为true则在mapvaluenull时调用 isNull 方法,为false时则忽略valuenull

所以可以将wrapper.allEq(map, false)中的null2IsNull置为false来达到上面方法的同样效果。

    public Result findMulti(String name, String sex, String position, String phone, Integer department_id, Integer now_page, Integer num) {
        HashMap<String, Object> map = new HashMap<>();
        map.put("name",name);
        map.put("sex", sex);
        map.put("position", position);
        map.put("phone", phone);
        map.put("department_id", department_id);
        
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        //null2IsNull置为false
        wrapper.allEq(map, false);
        Page<Employee> page = new Page<>(now_page,num);
        Page<Employee> pageOut = employeeService.page(page,wrapper);
		//这里统一了结果封装
        return Result.succ(pageOut);
    }

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值