Mybatis实现 动态排序

版权声明:LT https://blog.csdn.net/LitongZero/article/details/83753813

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");

猜你喜欢

转载自blog.csdn.net/LitongZero/article/details/83753813
今日推荐