From 9d0c475742be897210b697858ce603af6833ac10 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Thu, 9 Nov 2023 17:55:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E8=BF=9E=E6=8E=A5=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E5=8E=82=E5=95=86=E4=B8=8D=E5=90=8C=EF=BC=8C=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E4=B8=8D=E5=90=8Csql=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1020998336348160]支持根据连接数据库的厂商不同,加载不同sql语句 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1020998336348160 --- src/main/java/META-INF/root-context.xml | 12 +++ .../plugin/NeatLogicDatabaseIdProvider.java | 99 +++++++++++++++++++ .../framework/framework-servlet-context.xml | 1 + 3 files changed, 112 insertions(+) create mode 100644 src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java diff --git a/src/main/java/META-INF/root-context.xml b/src/main/java/META-INF/root-context.xml index 03972a228..60f38ce9a 100644 --- a/src/main/java/META-INF/root-context.xml +++ b/src/main/java/META-INF/root-context.xml @@ -99,6 +99,17 @@ + + + + + mysql + oceanbase + tidb + + + + @@ -108,6 +119,7 @@ classpath*:neatlogic/framework/**/mapper/*.xml + diff --git a/src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java b/src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java new file mode 100644 index 000000000..e37f804f9 --- /dev/null +++ b/src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java @@ -0,0 +1,99 @@ +package neatlogic.framework.dao.plugin; + +import org.apache.ibatis.logging.Log; +import org.apache.ibatis.logging.LogFactory; +import org.apache.ibatis.mapping.DatabaseIdProvider; + +import javax.sql.DataSource; +import java.sql.*; +import java.util.Map; +import java.util.Objects; +import java.util.Properties; + +public class NeatLogicDatabaseIdProvider implements DatabaseIdProvider { + + private final String MYSQL = "MySQL"; + private final String TIDB = "TiDB"; + private final String OCEAN_BASE = "OceanBase"; + + private String databaseId; + private Properties properties; + + public NeatLogicDatabaseIdProvider() { + + } + @Override + public void setProperties(Properties p) { + this.properties = p; + } + + @Override + public String getDatabaseId(DataSource dataSource) throws SQLException { + if (databaseId != null) { + return databaseId; + } + if (dataSource == null) { + throw new NullPointerException("dataSource cannot be null"); + } + try { + databaseId = getDatabaseName(dataSource); + System.out.println("databaseId = " + databaseId); + } catch (Exception e) { + LogHolder.log.error("Could not get a databaseId from dataSource", e); + } + return databaseId; + } + + private String getDatabaseName(DataSource dataSource) throws SQLException { + String productName = getDatabaseProductName(dataSource); + System.out.println("productName = " + productName); + if (this.properties != null) { + for (Map.Entry property : properties.entrySet()) { + if (productName.contains((String) property.getKey())) { + return (String) property.getValue(); + } + } + // no match, return null + return null; + } + return productName; + } + + private String getDatabaseProductName(DataSource dataSource) throws SQLException { + try (Connection con = dataSource.getConnection()) { + DatabaseMetaData metaData = con.getMetaData(); + String databaseProductName = metaData.getDatabaseProductName(); + if (Objects.equals(databaseProductName, MYSQL)) { + Statement statement = null; + ResultSet resultSet = null; + try { + statement = con.createStatement(); + resultSet = statement.executeQuery("SELECT @@version"); + while (resultSet.next()) { + String databaseProductVersion = resultSet.getString(1); + if (databaseProductVersion.contains(TIDB)) {// 8.0.11-TiDB-v7.4.0 + databaseProductName = TIDB; + } else if (databaseProductVersion.contains(OCEAN_BASE)) {// 5.7.25-OceanBase_CE-v4.2.0.0 + databaseProductName = OCEAN_BASE; + } + break; + } + } catch (Exception e) { + LogHolder.log.error(e.getMessage(), e); + } finally { + if (resultSet != null) { + resultSet.close(); + } + if (statement != null) { + statement.close(); + } + } + } + return databaseProductName; + } + } + + private static class LogHolder { + private static final Log log = LogFactory.getLog(NeatLogicDatabaseIdProvider.class); + } +} diff --git a/src/main/java/neatlogic/framework/framework-servlet-context.xml b/src/main/java/neatlogic/framework/framework-servlet-context.xml index fc919c024..286e0b312 100644 --- a/src/main/java/neatlogic/framework/framework-servlet-context.xml +++ b/src/main/java/neatlogic/framework/framework-servlet-context.xml @@ -51,6 +51,7 @@ + -- Gitee From 9bb12c48c27b30912e024305e7368c0c2e474ed8 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Thu, 9 Nov 2023 18:26:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E8=BF=9E=E6=8E=A5=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E5=8E=82=E5=95=86=E4=B8=8D=E5=90=8C=EF=BC=8C=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E4=B8=8D=E5=90=8Csql=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1020998336348160]支持根据连接数据库的厂商不同,加载不同sql语句 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1020998336348160 --- .../framework/dao/plugin/NeatLogicDatabaseIdProvider.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java b/src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java index e37f804f9..e01091b78 100644 --- a/src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java +++ b/src/main/java/neatlogic/framework/dao/plugin/NeatLogicDatabaseIdProvider.java @@ -37,7 +37,6 @@ public class NeatLogicDatabaseIdProvider implements DatabaseIdProvider { } try { databaseId = getDatabaseName(dataSource); - System.out.println("databaseId = " + databaseId); } catch (Exception e) { LogHolder.log.error("Could not get a databaseId from dataSource", e); } @@ -46,7 +45,6 @@ public class NeatLogicDatabaseIdProvider implements DatabaseIdProvider { private String getDatabaseName(DataSource dataSource) throws SQLException { String productName = getDatabaseProductName(dataSource); - System.out.println("productName = " + productName); if (this.properties != null) { for (Map.Entry property : properties.entrySet()) { if (productName.contains((String) property.getKey())) { -- Gitee