ソースを参照

自动配置数据库方言

Signed-off-by: 冰雨 <wangyiywc@163.com>
冰雨 2 年 前
コミット
f05fdcddf0

+ 33 - 1
src/main/java/com/jfinal/plugin/activerecord/ActiveRecordPlugin.java

@@ -23,7 +23,7 @@ import javax.sql.DataSource;
 import com.jfinal.kit.StrKit;
 import com.jfinal.plugin.IPlugin;
 import com.jfinal.plugin.activerecord.cache.ICache;
-import com.jfinal.plugin.activerecord.dialect.Dialect;
+import com.jfinal.plugin.activerecord.dialect.*;
 import com.jfinal.plugin.activerecord.sql.SqlKit;
 
 /**
@@ -75,6 +75,7 @@ public class ActiveRecordPlugin implements IPlugin {
 		}
 		this.dataSourceProvider = dataSourceProvider;
 		this.config = new Config(configName, null, transactionLevel);
+		this.autoConfigDialect(dataSourceProvider.getJdbcUrl());
 	}
 	
 	public ActiveRecordPlugin(IDataSourceProvider dataSourceProvider) {
@@ -330,6 +331,37 @@ public class ActiveRecordPlugin implements IPlugin {
 		this.tableBuilder = tableBuilder;
 		return this;
 	}
+
+	private void autoConfigDialect(String jdbcUrl) {
+		if (jdbcUrl.startsWith("jdbc:") && jdbcUrl.substring("jdbc:".length()).contains(":")) {
+			String dialect = jdbcUrl.substring("jdbc:".length(), jdbcUrl.indexOf(":", "jdbc:".length())).toLowerCase();
+			switch (dialect) {
+				case "h2":
+					setDialect(new H2Dialect());
+					break;
+				case "informix-sqli":
+					setDialect(new InformixDialect());
+					break;
+				case "mysql":
+					setDialect(new MysqlDialect());
+					break;
+				case "oracle":
+					setDialect(new OracleDialect());
+					break;
+				case "postgresql":
+					setDialect(new PostgreSqlDialect());
+					break;
+				case "sqlite":
+					setDialect(new Sqlite3Dialect());
+					break;
+				case "sqlserver":
+					setDialect(new SqlServerDialect());
+					break;
+				default:
+					setDialect(new AnsiSqlDialect());
+            }
+        }
+	}
 }
 
 

+ 1 - 0
src/main/java/com/jfinal/plugin/activerecord/IDataSourceProvider.java

@@ -24,6 +24,7 @@ import javax.sql.DataSource;
  * ActiveRecordPlugin constructor accept DataSourceProvider and DataSource
  */
 public interface IDataSourceProvider {
+	String getJdbcUrl();
 	DataSource getDataSource();
 }
 

+ 5 - 0
src/main/java/com/jfinal/plugin/c3p0/C3p0Plugin.java

@@ -166,6 +166,11 @@ public class C3p0Plugin implements IPlugin, IDataSourceProvider {
 	private Integer toInt(String str) {
 		return Integer.parseInt(str);
 	}
+
+	@Override
+	public String getJdbcUrl() {
+		return jdbcUrl;
+	}
 	
 	public DataSource getDataSource() {
 		return dataSource;

+ 5 - 0
src/main/java/com/jfinal/plugin/druid/DruidPlugin.java

@@ -286,6 +286,11 @@ public class DruidPlugin implements IPlugin, IDataSourceProvider {
 		isStarted = false;
 		return true;
 	}
+
+	@Override
+	public String getJdbcUrl() {
+		return url;
+	}
 	
 	public DataSource getDataSource() {
 		return ds;

+ 4 - 0
src/main/java/com/jfinal/plugin/hikaricp/HikariCpPlugin.java

@@ -151,6 +151,10 @@ public class HikariCpPlugin implements IPlugin, IDataSourceProvider{
 		this.driverClass = driverClass;
 	}
 
+	@Override
+	public String getJdbcUrl() {
+		return jdbcUrl;
+	}
 
 	@Override
 	public DataSource getDataSource() {