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>

猜你喜欢

转载自panhuan.iteye.com/blog/1339846