问题
sql查询需要根据条件动态修改排序字段以及升降序;
刚开始尝试在sql中直接使用choose when进行判断:
<choose>
<when test="flag== '5'">
order by A_DATE desc
</when>
<otherwise>
order by B_DATE asc
</otherwise>
</choose>
此方式执行时,始终进不了判断。
解决方案
使用 order by ${order} ${orderType}进行判断,在传递查询条件的时候,将需要排序的字段注入
if(StringUtil.isBlank(isImport) || "5".equals(flag)){
condition.put("order", "A_DATE ");
condition.put("orderType", "desc");
}else if(Constants.VEHICLE_IMPORT_TYPE.RELATEIMPORT.equals(flag)){
condition.put("order", "B_DATE ");
condition.put("orderType", "asc");
}
执行后sql为 order by A_DATE desc 或 order by B_DATE asc。
如此便解决问题。
注意
order by ${order} ${orderType} 不能使用
order by #{order} #{orderType},否在执行后sql会是order by ‘A_DATE’ ‘desc’ 或 order by ‘B_DATE’ ‘asc’ 导致sql执行报错。