mirror of
https://github.com/YunaiV/ruoyi-vue-pro.git
synced 2025-10-27 20:06:25 +08:00
fix:【framework 框架】MyBatisUtils addOrder 时,未兼容 LambdaQueryWrapper 场景
This commit is contained in:
@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.common.pojo.SortingField;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
|
import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||||
@ -47,16 +48,36 @@ public class MyBatisUtils {
|
|||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("PatternVariableCanBeUsed")
|
||||||
public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) {
|
public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) {
|
||||||
if (CollUtil.isEmpty(sortingFields)) {
|
if (CollUtil.isEmpty(sortingFields)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
|
if (wrapper instanceof QueryWrapper<T>) {
|
||||||
for (SortingField sortingField : sortingFields) {
|
QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
|
||||||
query.orderBy(true,
|
for (SortingField sortingField : sortingFields) {
|
||||||
SortingField.ORDER_ASC.equals(sortingField.getOrder()),
|
query.orderBy(true,
|
||||||
StrUtil.toUnderlineCase(sortingField.getField()));
|
SortingField.ORDER_ASC.equals(sortingField.getOrder()),
|
||||||
|
StrUtil.toUnderlineCase(sortingField.getField()));
|
||||||
|
}
|
||||||
|
} else if (wrapper instanceof LambdaQueryWrapper<T>) {
|
||||||
|
// LambdaQueryWrapper 不直接支持字符串字段排序,使用 last 方法拼接 ORDER BY
|
||||||
|
LambdaQueryWrapper<T> lambdaQuery = (LambdaQueryWrapper<T>) wrapper;
|
||||||
|
StringBuilder orderBy = new StringBuilder();
|
||||||
|
for (SortingField sortingField : sortingFields) {
|
||||||
|
if (StrUtil.isNotEmpty(orderBy)) {
|
||||||
|
orderBy.append(", ");
|
||||||
|
}
|
||||||
|
orderBy.append(StrUtil.toUnderlineCase(sortingField.getField()))
|
||||||
|
.append(" ")
|
||||||
|
.append(SortingField.ORDER_ASC.equals(sortingField.getOrder()) ? "ASC" : "DESC");
|
||||||
|
}
|
||||||
|
lambdaQuery.last("ORDER BY " + orderBy);
|
||||||
|
// 另外个思路:https://blog.csdn.net/m0_59084856/article/details/138450913
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Unsupported wrapper type: " + wrapper.getClass().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user