5

次のよりクリーンな方法はありますか:

<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 のフィールドはどうでしょうか? これをあまり冗長にしない別の方法はありますか?

4

2 に答える 2

1

同様の問題についての私の答えを参照してください。

Mybatisのプロパティを列にマップ

ただし、唯一の欠点は、Javaコードが列名を認識できることです。

于 2013-01-28T05:58:57.667 に答える