mybatis查询字段动态变换与根据参数数组排序


@ResponseBody
    public ResponseEntity<Map<String, Object>> paramProduct(String fieldListStr, String spuCode) {
        Map<String, Object> returnMap = new HashMap<>();
        try {
            Map<String, Object> paramMap = new HashMap<>();
            if (StringUtils.isBlank(fieldListStr) || StringUtils.isBlank(spuCode)) {
                returnMap.put("status", 0);
                returnMap.put("msg", "请求参数不合法");
                return new ResponseEntity(returnMap, HttpStatus.OK);
            }
            List<String> fieldList = Arrays.asList(fieldListStr.split(","));
            paramMap.put("fieldList", fieldList);
            paramMap.put("spuCode", "'" + spuCode + "'");
            Map<String, Object> resultMap = productManageService.paramProduct(paramMap);
            returnMap.put("status", 1);
            returnMap.put("msg", "success");
            returnMap.put("data", resultMap);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            returnMap.put("status", 0);
            returnMap.put("msg", "系统异常");
        }
        return new ResponseEntity(returnMap, HttpStatus.OK);
    }

  controller中fieldListStr是需要查询的字段,spuCode是判断条件,需要注意的是spuCode需要用单引号括起来,否则查询会报错!

<select id="paramProduct" resultType="Map" parameterType="java.util.Map" statementType="STATEMENT" >
    select      
    <foreach collection="fieldList" item="field" separator=",">
         ${field}
      </foreach>
     from table where 1=1 
    <if test="spuCode != null and spuCode != ''" >
        and spu_code = ${spuCode}
      </if>
  </select>

  对应的脚本写法,注意statementType="STATEMENT"这个需要配置,还是对应参数获取不适用#,需要换为$

 

mybatis中,如果有需要根据某个list数组中的顺序进行排序的话,可以如下:

<select id="queryProductListOrder" resultMap="BaseResultMap" parameterType="java.util.Map">
	select pro_id,name,price,cover,unit,clicks,cut_price,cut_unit,card_price, card_ship_type
	from sb_product_statistics 
	where 1=1 
	<if test="prdIdList != null and prdIdList.size > 0" >
		and pro_id in   
		<foreach collection="prdIdList" index="index" item="productId" open="(" separator="," close=")">
	         #{productId}
	     </foreach>
	     order by field(pro_id,<foreach collection="prdIdList" index="index" item="productId"  separator="," >
	         #{productId}
	     </foreach>)
     </if>
  </select>

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM