1. 程式人生 > >Mybatis實現 動態排序

Mybatis實現 動態排序

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>

然後再傳入欄位時,就這樣

user.setOrderField("userGrade");