Mybatis实现 动态排序

9 篇文章 0 订阅

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");
小小的赞助,谢谢!

在这里插入图片描述

  • 16
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值