|
|
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.common.pojo.SortingField;
|
|
|
import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
|
|
|
import com.baomidou.mybatisplus.annotation.DbType;
|
|
|
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.metadata.OrderItem;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
|
@@ -47,16 +48,36 @@ public class MyBatisUtils {
|
|
|
return page;
|
|
|
}
|
|
|
|
|
|
+ @SuppressWarnings("PatternVariableCanBeUsed")
|
|
|
public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) {
|
|
|
if (CollUtil.isEmpty(sortingFields)) {
|
|
|
return;
|
|
|
}
|
|
|
- QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
|
|
|
- for (SortingField sortingField : sortingFields) {
|
|
|
- query.orderBy(true,
|
|
|
- SortingField.ORDER_ASC.equals(sortingField.getOrder()),
|
|
|
- StrUtil.toUnderlineCase(sortingField.getField()));
|
|
|
+ if (wrapper instanceof QueryWrapper<T>) {
|
|
|
+ QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
|
|
|
+ for (SortingField sortingField : sortingFields) {
|
|
|
+ query.orderBy(true,
|
|
|
+ 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());
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|