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