mybatis使用foreach标签实现order by
在mybatis select标签配置
<if test="orderBy!=null">
<foreach collection="orderBy" item="order" open="order by " separator="," close=" ">
#{order}
</foreach>
<if test="orderDesc!=null">#{orderDesc}</if>
<if test="orderDesc==null">desc</if>
</if>
在bean中声称
public String[] orderBy = new String[]{"SEQNO"};
public String orderDesc;
get...
set...
mybatis生成sql和传递的参数
2011-12-31 10:40:02,312 DEBUG [java.sql.PreparedStatement] ==> Executing: SELECT * from HR_ORGANIZATION where 1=1 AND UPORG = ? order by ? desc
2011-12-31 10:40:02,312 DEBUG [java.sql.PreparedStatement] ==> Parameters: yqdoqdf1325055012078(String), SEQNO(String)
但结果没有按照SEQNO排序
mybatis最终执行的sql是:SELECT * from HR_ORGANIZATION where 1=1 AND UPORG = 'yqdoqdf1325055012078' order by 'SEQNO' desc 而不是想要的SELECT * from HR_ORGANIZATION where 1=1 AND UPORG = 'yqdoqdf1325055012078' order by SEQNO desc
解决方案#
把mybatis的sql配置
<foreach collection="orderBy" item="order" open="order by " separator="," close=" ">
<font color="red">#{order}</font>
</foreach>
<if test="orderDesc!=null">#{orderDesc}</if>
修改成
<foreach collection="orderBy" item="order" open="order by " separator="," close=" ">
<font color="red">${order}</font>
</foreach>
<if test="orderDesc!=null">${orderDesc}</if>