本文主要是介绍mybatis框架order by作为参数传入时失效小坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
mxl中的语句如下
<select id="statToday" resultType="com.dahua.la.business.model.vo.StatSysResultVO">select a,b,count(1) as totalfrom tablewhere a is not nulland b is not nulland operateTime >= #{startTime,jdbcType=TIMESTAMP}and operateTime <= #{endTime,jdbcType=TIMESTAMP}group by a, border by<foreach collection="orderItems" item="item" separator=",">#{item.orderBy} #{item.order}</foreach>
</select>
运行时通过日志打印出sql日志如下
select a, b, count(1) as total
from table
where a is not null and b is not null
and operateTime >= ? and operateTime <= ?
group by a, b
order by ? ?
把参数补充上拿到Navicat执行的时候,完全没有问题,排序也正常。但是在代码里执行就是不行, 最后的排序完全没有生效。
实际上,我补上参数的时候漏了引号,因为#{item.orderBy}会对传入的数据加一个引号,如果带着引号去Navicat执行,也是排序不生效的。问题原因找到了。直接替换成使用${item.orderBy}形式,单纯的字符串替换不加引号。
<foreach collection="orderItems" item="item" separator=",">${item.orderBy} ${item.order}
</foreach>
此时程序正常。
这篇关于mybatis框架order by作为参数传入时失效小坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!