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.setOrderField("user_grade");
user.setOrderType("desc");
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");
小小的赞助,谢谢!
