<MyBatis>前台同一个参数传多个条件查询方式(传数组或者拼接字符串)

方式一:前台传参为数组,后台SQ查询案例
一般为多选场景:查询;
举例如下:
传值:“status” : [“保存”,“关闭”],
不传值:“status”: [],

<MyBatis>前台同一个参数传多个条件查询方式(传数组或者拼接字符串)_第1张图片
传给后台:
控制层:


	@PostMapping(value = "/getList")
    @AuthInterceptor("mcg:getxxx:getList")
    public Result getList(HttpServletRequest request,@RequestBody String param) {
        try {
            Map<String, Object> paramMap = JsonUtils.readValue(param, Map.class);
            return Result.success().result(xxxService.getList(request,paramMap));
        } catch (Exception e) {
            log.error("XxxListController getList is error===:" + e.getMessage(), e);
            return Result.failure("查询失败");
        }
    }
    

Mapper.xml层:

	<!-- status:传数组 -->
    <if test = "null != status and status.size > 0">
        and status in
        <foreach collection="status" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </if>
  	

方式二:前台传参为拼接字符串,后台SQ查询案例
举例如下:
传值:“status”: “保存,关闭”,
不传值:“status”: “”,
<MyBatis>前台同一个参数传多个条件查询方式(传数组或者拼接字符串)_第2张图片
后台需要针对拼接的字符串做拆分;如:参数通过英文逗号“,”拼接;
如下代码:

	// 字符串转集合输出
	private List<String> getSplitList(String par){
        List<String> list = new ArrayList<>();
        if("" != par){
            String[] arr = par.split(",");  // 根据英文逗号拆分
            for (int i = 0; i < arr.length; i++) {
                list.add(arr[i]);
            }
        }
        return list;
    }
	
	public PageInfo<Map<String, Object>> getList(Map<String, Object> paramMap) {
     	List<String> statusList = getSplitList(String.valueOf(paramMap.get("status")));
        paramMap.put("statusList",statusList);
        List<Map<String, Object>> result = xxxListMapper.getList(paramMap);  // 表单查询数据
    }
    
	<!-- status:传集合 -->
    <if test = "null != statusList and statusList.size > 0">
        and status in
        <foreach collection="statusList" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </if>

总结:以上两种方式都可以解决多条件查询场景需求;

你可能感兴趣的:(MyBatis,java,mybatis,python,数据库)