需求
输入任意字段进行查询,如果字段为空,则忽略该字段,并分页输出。
阶段一
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
则在map
的value
为null
时调用 isNull 方法,为false
时则忽略value
为null
的
所以可以将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);
}
结果