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

jiqing9006 阅读:59 2024-02-24 18:49:41 评论:0

有没有更干净的方法来做下一个:

<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 的列名,那就太好了。我的意思是,结果 map 有这些信息。但似乎我无法从 xml 中获取它。

我的示例只有 5 个字段,但是 20 个字段呢?有没有另一种方法可以做到这一点不那么冗长?

请您参考如下方法:

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

Mybatis map property to column

但唯一的缺点是您的 Java 代码将了解列名。


标签:MyBatis
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号