欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MybatisPlus多条件查询并分页

程序员文章站 2024-03-02 08:05:46
...

需求

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

阶段一

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条件匹配。
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<>();
        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);
    }

结果

可以根据输入的参数,如果参数为空,则忽略该参数。但是不能实现分页。
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<>();
        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多条件查询并分页

分页阶段二

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);
    }

结果

MybatisPlus多条件查询并分页

相关标签: mybatis mysql