0%

Mybatis 中如何使用 "Order By" 排序

查询数据库我们经常需要对查询结果进行排序,那么在Mybatis是如何实现的呢?

实现原理

MyBatis Generator 生成的代码中,会包括Example.javaMapper.xml文件,
Mapper.xml文件中找到我们最常用的selectByExample方法,会在其中看到有 order by 排序语句:
mybatis order by

如果我们需要排序,那么只需要让这个order by语句能跑到就行了。

方法一: 修改逻辑层代码

只需要在设置 Example 的时候将排序语句加上就可以了,这种方法比较灵活,这里举例按id倒序查询,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
public List<OperationLogRes> listOperationLog(String deviceId) {
OperationLogExample example = new OperationLogExample();
example.createCriteria().andDeviceIdEqualTo(deviceId);
// 添加排序语句
example.setOrderByClause("id desc");
List<OperationLog> result = operationLogMapper.selectByExample(example);
if (!CollectionUtils.isEmpty(result)) {
return result.stream().map(OperationLogRes::newInstance).collect(Collectors.toList());
} else {
return new ArrayList<>(0);
}
}

其中的example.setOrderByClause("id desc"); 就是设置排序的地方,
如果有多个字段要排序,依次添加就可以了,比如:

1
example.setOrderByClause("name asc, age desc");

方法二: 修改 Mapper 文件

这种方法简单粗暴,但是不灵活,就是将上面 selectByExample方法中的<if test="orderByClause != null">给去掉,直接写上排序语句:
mybatis order by

注意事项

排序字段以数据库中的为准,比如数据库中的字段device_id在通过MyBatis Generator生成的时候会映射到实体类的deviceId字段,我们排序的时候要使用device_id而不是deviceId