mybatis使用动态sql按多个字段排序

Ale*_* Pi 5 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};
Run Code Online (Sandbox Code Playgroud)

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

public class FiltroBusquedaVO {

private Integer offset;
private Integer limit;
private String fieldName;
private String ascDesc; ... }
Run Code Online (Sandbox Code Playgroud)

如果我能得到给定 fieldName 的列名,那就太好了。我的意思是,结果地图有这些信息。但似乎我无法从xml中获取它。

我的示例只有 5 个字段,但是 20 个字段又如何呢?还有另一种方法可以让这件事变得不那么冗长吗?

K. *_*ddy 1

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

Mybatis 将属性映射到列

但唯一的缺点是你的java代码会知道列名。