ludc
2024-10-17 d02571d59633367ac76b7f58ab38584698b1aa1b
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtil.java
@@ -14,7 +14,7 @@
import java.util.Map;
/**
 * in 参数截取,返回wrapper
 * in 参数截取,返回wrapper/或者where条件字符串
 *
 * @author ludc
 * @date 2023/5/5
@@ -22,6 +22,76 @@
public class MybatisParameterUtil {
   /**
    * Oracle IN 查询的最大参数限制
     */
   private static final int MAX_IN_CLAUSE_SIZE = 1000;
   /**
    * 将给定的 ID 列表转换为适合 Oracle 的查询条件
    *
    * @param ids ID 列表
    * @return 适合 Oracle 的查询条件
    */
   public static String convertToOrConditions(String filed,List<String> ids) {
      if (ids == null || ids.isEmpty()) {
         return "";
      }
      StringBuilder queryBuilder = new StringBuilder();
      int size = ids.size();
      // 分批处理,避免超过 Oracle IN 查询的最大限制
      for (int i = 0; i < size; i += MAX_IN_CLAUSE_SIZE) {
         int end = Math.min(i + MAX_IN_CLAUSE_SIZE, size);
         List<String> subList = ids.subList(i, end);
         if (queryBuilder.length() > 0) {
            queryBuilder.append(" OR ");
         }
         queryBuilder.append("(")
            .append(getInClause(filed,subList)).append(")");
      }
      return queryBuilder.toString();
   }
    /*
    * 获取 IN 查询条件字符串
    * @param ids ID 列表
    * @return IN 查询条件字符串
    */
   private static String getInClause(String filed,List<String> ids) {
      StringBuilder inClauseBuilder = new StringBuilder();
      inClauseBuilder.append(filed + " IN (");
      for (int i = 0; i < ids.size(); i++) {
         inClauseBuilder.append("'").append(ids.get(i)).append("'");
         if (i < ids.size() - 1) {
            inClauseBuilder.append(", ");
         }
      }
      inClauseBuilder.append(")");
      return inClauseBuilder.toString();
   }
   /**
    * 获取 IN 查询条件字符串(不包含in)
    *
    * @param ids ID 列表
    * @return IN 查询条件字符串
    */
   public static String getInClause(List<String> ids) {
      StringBuilder inClauseBuilder = new StringBuilder();
      for (int i = 0; i < ids.size(); i++) {
         inClauseBuilder.append("'").append(ids.get(i)).append("'");
         if (i < ids.size() - 1) {
            inClauseBuilder.append(", ");
         }
      }
      return inClauseBuilder.toString();
   }
   /**
    * in作为查询条件时,防止大于1000出现报错,对条件进行截取,连表查询的wrapper
    * @param wrapper MPJLambdaWrapper,不进行连表查询时使用
    * @param column 作为in的条件列