mybatis用动态sql对很多字段进行排序

时间:2012-08-15 02:10:29

标签: ibatis mybatis

是否有更清洁的方法来完成下一步:

<select id="getWithQueryData" resultMap="usuarioResult" parameterType="my.QueryData" >
select * from t_user 
 <if test="fieldName != null and ascDesc != null">
    order by
        <choose>  
            <when test="fieldName == 'name'">
                c_name 
            </when>         
            <when test="fieldName == 'lastName'">
                c_last_name 
            </when> 
            <when test="fieldName == 'email'">
                c_email 
            </when> 
            <when test="fieldName == 'password'">
                c_password 
            </when> 
            <when test="fieldName == 'age'">
                i_age
            </when>                                                             
        </choose>               
        <if test="ascDesc == 'asc'">
            asc 
        </if>            
        <if test="ascDesc == 'desc'">
            desc 
        </if>   
 </if>
limit #{limit} offset #{offset};

正如您所推断的,QueryData看起来像:

public class FiltroBusquedaVO {

private Integer offset;
private Integer limit;
private String fieldName;
private String ascDesc; ... }

如果我可以获得一个给出fieldName的列名,那将会很好。我的意思是,结果地图有这个信息。但似乎我无法从xml中获取它。

我的例子只有5个字段,但20个字段呢?还有另一种方法可以减少这种冗长吗?

1 个答案:

答案 0 :(得分:0)

请参阅我对类似问题的回答。

Mybatis map property to column

但有了这个唯一的缺点就是java代码会知道列名。