| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * in 参数截取,返回wrapper |
| | | * in 参数截取,返回wrapper/或者where条件字符串 |
| | | * |
| | | * @author ludc |
| | | * @date 2023/5/5 |
| | |
| | | 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的条件列 |