Mybatis實現 動態排序
阿新 • • 發佈:2018-12-22
Mybatis實現 動態排序
在資料展示時,很有可能碰到,需要動態排序的需求。當資料比較少的時候,還可以前端排序,但是,當資料非常大,尤其是涉及到分頁的時候,就必須要用後端解決了。
以下,提供一種後端動態排序解決方案。
比如,現在我要查詢使用者資訊(User)表。
可以在查詢時,介面中,多新增兩個欄位。
orderField
(排序列)
orderType
(排序規則,升降序)
之後,在mapper.xml
中的查詢列表方法,新增
SELECT
name , sex , age , user_grade as userGrade
FROM user
<if test="orderField !=null and orderField != '' ">
order by ${orderField} ${orderType}
</if>
注意事項:使用這樣連續拼接兩個注入引數時,只能用${}
,不能用#{}
。
詳情可以檢視解釋
這時,在我們查詢時,可以在傳入引數
User user = new User();
//以user_grade欄位排序
user.setOrderField("user_grade");
//降序
user.setOrderType("desc");
//可在User類中新增
//在未傳入時,使用set注入,設定預設值
public String getOrderField() {
if (orderField == null || "".equals(orderField)) {
orderField = "create_time";
}
return orderField;
}
public String getOrderType() {
if (orderType == null || "".equals(orderType)) {
orderType = "desc";
}
return orderType;
}
如果,你覺得傳入資料庫中欄位user_grade
很不舒服的話。可以這樣寫SQL
SELECT
name , sex , age , user_grade as userGrade
FROM user
<if test="orderField != null" >
ORDER BY
<choose>
<when test="orderField == 'name'">
name ${orderType}
</when>
<when test="orderField == 'age'">
age ${orderType}
</when>
<when test="orderField == 'userGrade'">
user_grade ${orderType}
</when>
<otherwise>
create_time ${orderType}
</otherwise>
</choose>
</if>