对于自定义的查询,mybatis-plus如何在不在xml里面硬编码实现排序
时间: 2024-02-25 17:53:47 浏览: 78
如果不想在 XML 文件中硬编码 SQL 语句,也可以在自定义的查询方法中,使用 `QueryWrapper` 对象指定排序方式。示例如下:
```
public interface UserMapper extends BaseMapper<User> {
List<User> selectByAge(int age, String orderBy);
}
```
在上面的示例中,`selectByAge` 方法中新增了一个 `orderBy` 参数,用于指定排序方式。在方法实现中,可以使用 `QueryWrapper` 对象动态指定排序方式。示例如下:
```
public List<User> selectByAge(int age, String orderBy) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
if (StringUtils.isNotBlank(orderBy)) {
String[] orderByArr = orderBy.split(",");
for (String field : orderByArr) {
boolean isAsc = true;
if (field.startsWith("-")) {
isAsc = false;
field = field.substring(1);
}
if (isAsc) {
queryWrapper.orderByAsc(field);
} else {
queryWrapper.orderByDesc(field);
}
}
}
return userMapper.selectList(queryWrapper);
}
```
在上面的实现中,首先创建了一个 `QueryWrapper` 对象,并根据传入的参数 `age` 添加查询条件。然后,如果传入了 `orderBy` 参数,则按照 `,` 分割,循环处理每个排序字段。如果排序字段以 `-` 开头,则表示降序排序,否则表示升序排序。最后,使用 `orderByAsc` 或 `orderByDesc` 方法指定排序方式,最终返回符合查询条件的结果。
需要注意的是,在使用这种方式时,需要手动处理SQL注入等安全问题,例如对传入的排序字段进行校验和过滤。
阅读全文