From 06511ce9253ddb2478ce6ee4e4cbe274fd6240c4 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Thu, 14 Mar 2024 16:48:01 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=A1=A5=E5=85=A8findInSet=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/mybatis/helper/DataBaseHelper.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java index bb20f4b3a..4246bb1d6 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java @@ -2,11 +2,11 @@ package org.dromara.common.mybatis.helper; import cn.hutool.core.convert.Convert; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.mybatis.enums.DataBaseType; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import javax.sql.DataSource; import java.sql.Connection; @@ -14,7 +14,6 @@ import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -import java.util.Set; /** * 数据库助手 @@ -56,19 +55,38 @@ public class DataBaseHelper { return DataBaseType.SQL_SERVER == getDataBaseType(); } + /** + * 根据数据库类型生成用于判断值是否存在于以逗号分隔的字符串中的查询条件 + * + * @param var1 要判断的值 + * @param var2 逗号分隔的字符串 + * @return 生成的查询条件字符串 + */ public static String findInSet(Object var1, String var2) { DataBaseType dataBasyType = getDataBaseType(); String var = Convert.toStr(var1); if (dataBasyType == DataBaseType.SQL_SERVER) { + // 对于 SQL Server 数据库,使用 CHARINDEX 函数来判断 + // CHARINDEX 函数用于查找一个字符串在另一个字符串中的位置 + // 这里的查询条件表示查找 var1 是否存在于以逗号分隔的字符串 var2 中 // charindex(',100,' , ',0,100,101,') <> 0 return "charindex(',%s,' , ','+%s+',') <> 0".formatted(var, var2); } else if (dataBasyType == DataBaseType.POSTGRE_SQL) { + // 对于 PostgreSQL 数据库,使用 POSITION 函数来判断 + // POSITION 函数用于在一个字符串中查找另一个字符串,并返回其位置 + // 这里的查询条件表示查找 var1 是否存在于以逗号分隔的字符串 var2 中 // (select position(',100,' in ',0,100,101,')) <> 0 return "(select position(',%s,' in ','||%s||',')) <> 0".formatted(var, var2); } else if (dataBasyType == DataBaseType.ORACLE) { + // 对于 Oracle 数据库,使用 INSTR 函数来判断 + // INSTR 函数用于在一个字符串中查找另一个字符串,并返回其位置 + // 这里的查询条件表示查找 var1 是否存在于以逗号分隔的字符串 var2 中 // instr(',0,100,101,' , ',100,') <> 0 return "instr(','||%s||',' , ',%s,') <> 0".formatted(var2, var); } + // 默认情况下(假设是 MySQL),使用 FIND_IN_SET 函数来判断 + // FIND_IN_SET 函数用于在一个以逗号分隔的字符串中查找一个值,并返回其位置 + // 这里的查询条件表示查找 var1 是否存在于以逗号分隔的字符串 var2 中 // find_in_set(100 , '0,100,101') return "find_in_set('%s' , %s) <> 0".formatted(var, var2); }