Commit 2e47ffdba1b9b92a15c6d94f6caa8a97d6978efc

Authored by YunaiV
1 parent b5d5fa8e

fix:【framework 框架】MyBatisUtils addOrder 时,未兼容 LambdaQueryWrapper 场景

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.common.pojo.SortingField; @@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.common.pojo.SortingField;
9 import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum; 9 import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
10 import com.baomidou.mybatisplus.annotation.DbType; 10 import com.baomidou.mybatisplus.annotation.DbType;
11 import com.baomidou.mybatisplus.core.conditions.Wrapper; 11 import com.baomidou.mybatisplus.core.conditions.Wrapper;
  12 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
12 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 13 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
13 import com.baomidou.mybatisplus.core.metadata.OrderItem; 14 import com.baomidou.mybatisplus.core.metadata.OrderItem;
14 import com.baomidou.mybatisplus.core.toolkit.StringPool; 15 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -47,16 +48,36 @@ public class MyBatisUtils { @@ -47,16 +48,36 @@ public class MyBatisUtils {
47 return page; 48 return page;
48 } 49 }
49 50
  51 + @SuppressWarnings("PatternVariableCanBeUsed")
50 public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) { 52 public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) {
51 if (CollUtil.isEmpty(sortingFields)) { 53 if (CollUtil.isEmpty(sortingFields)) {
52 return; 54 return;
53 } 55 }
54 - QueryWrapper<T> query = (QueryWrapper<T>) wrapper;  
55 - for (SortingField sortingField : sortingFields) {  
56 - query.orderBy(true,  
57 - SortingField.ORDER_ASC.equals(sortingField.getOrder()),  
58 - StrUtil.toUnderlineCase(sortingField.getField())); 56 + if (wrapper instanceof QueryWrapper<T>) {
  57 + QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
  58 + for (SortingField sortingField : sortingFields) {
  59 + query.orderBy(true,
  60 + SortingField.ORDER_ASC.equals(sortingField.getOrder()),
  61 + StrUtil.toUnderlineCase(sortingField.getField()));
  62 + }
  63 + } else if (wrapper instanceof LambdaQueryWrapper<T>) {
  64 + // LambdaQueryWrapper 不直接支持字符串字段排序,使用 last 方法拼接 ORDER BY
  65 + LambdaQueryWrapper<T> lambdaQuery = (LambdaQueryWrapper<T>) wrapper;
  66 + StringBuilder orderBy = new StringBuilder();
  67 + for (SortingField sortingField : sortingFields) {
  68 + if (StrUtil.isNotEmpty(orderBy)) {
  69 + orderBy.append(", ");
  70 + }
  71 + orderBy.append(StrUtil.toUnderlineCase(sortingField.getField()))
  72 + .append(" ")
  73 + .append(SortingField.ORDER_ASC.equals(sortingField.getOrder()) ? "ASC" : "DESC");
  74 + }
  75 + lambdaQuery.last("ORDER BY " + orderBy);
  76 + // 另外个思路:https://blog.csdn.net/m0_59084856/article/details/138450913
  77 + } else {
  78 + throw new IllegalArgumentException("Unsupported wrapper type: " + wrapper.getClass().getName());
59 } 79 }
  80 +
60 } 81 }
61 82
62 /** 83 /**