读书人

mybatis运用foreach标签实现order by

发布时间: 2012-10-26 10:30:58 作者: rapoo

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>

读书人网 >软件架构设计

热点推荐