浏览代码

sqlserver的不确定性 优先设置用户选择的数据库类型

Caratacus 8 年之前
父节点
当前提交
666c9ec442

+ 4 - 1
src/main/java/com/baomidou/mybatisplus/entity/GlobalConfiguration.java

@@ -118,9 +118,12 @@ public class GlobalConfiguration implements Serializable {
      *
      * @param jdbcUrl
      */
-    public void setDbType(String jdbcUrl) {
+    public void setDbTypeOfJdbcUrl(String jdbcUrl) {
         this.dbType = JdbcUtils.getDbType(jdbcUrl);
     }
+    public void setDbType(String dbType) {
+        this.dbType = DBType.getDBType(dbType);
+    }
 
     public IdType getIdType() {
         return idType;

+ 11 - 1
src/main/java/com/baomidou/mybatisplus/plugins/CachePaginationInterceptor.java

@@ -58,6 +58,8 @@ public class CachePaginationInterceptor extends PaginationInterceptor implements
     private boolean overflowCurrent = false;
     // COUNT SQL 解析
     private AbstractSqlParser sqlParser;
+    /* 方言类型 */
+    private String dialectType;
     /* 方言实现类 */
     private String dialectClazz;
 
@@ -79,7 +81,7 @@ public class CachePaginationInterceptor extends PaginationInterceptor implements
             BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql");
             String originalSql = boundSql.getSql();
             Connection connection = (Connection) invocation.getArgs()[0];
-            DBType dbType = JdbcUtils.getDbType(connection.getMetaData().getURL());
+            DBType dbType = StringUtils.isNotEmpty(dialectType) ? DBType.getDBType(dialectType) : JdbcUtils.getDbType(connection.getMetaData().getURL());
             if (rowBounds instanceof Pagination) {
                 Pagination page = (Pagination) rowBounds;
                 boolean orderBy = true;
@@ -136,12 +138,20 @@ public class CachePaginationInterceptor extends PaginationInterceptor implements
     }
 
     public void setProperties(Properties prop) {
+        String dialectType = prop.getProperty("dialectType");
         String dialectClazz = prop.getProperty("dialectClazz");
+        if (StringUtils.isNotEmpty(dialectType)) {
+            this.dialectType = dialectType;
+        }
         if (StringUtils.isNotEmpty(dialectClazz)) {
             this.dialectClazz = dialectClazz;
         }
     }
 
+    public void setDialectType(String dialectType) {
+        this.dialectType = dialectType;
+    }
+
     public void setSqlParser(AbstractSqlParser sqlParser) {
         this.sqlParser = sqlParser;
     }

+ 11 - 1
src/main/java/com/baomidou/mybatisplus/plugins/PaginationInterceptor.java

@@ -65,6 +65,8 @@ public class PaginationInterceptor implements Interceptor {
     private AbstractSqlParser sqlParser;
     /* 溢出总页数,设置第一页 */
     private boolean overflowCurrent = false;
+    /* 方言类型 */
+    private String dialectType;
     /* 方言实现类 */
     private String dialectClazz;
     /* 是否开启 PageHelper localPage 模式 */
@@ -100,7 +102,7 @@ public class PaginationInterceptor implements Interceptor {
         BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql");
         String originalSql = boundSql.getSql();
         Connection connection = (Connection) invocation.getArgs()[0];
-        DBType dbType = JdbcUtils.getDbType(connection.getMetaData().getURL());
+        DBType dbType = StringUtils.isNotEmpty(dialectType) ? DBType.getDBType(dialectType) : JdbcUtils.getDbType(connection.getMetaData().getURL());
         if (rowBounds instanceof Pagination) {
             Pagination page = (Pagination) rowBounds;
             boolean orderBy = true;
@@ -169,13 +171,21 @@ public class PaginationInterceptor implements Interceptor {
     }
 
     public void setProperties(Properties prop) {
+        String dialectType = prop.getProperty("dialectType");
         String dialectClazz = prop.getProperty("dialectClazz");
 
+        if (StringUtils.isNotEmpty(dialectType)) {
+            this.dialectType = dialectType;
+        }
         if (StringUtils.isNotEmpty(dialectClazz)) {
             this.dialectClazz = dialectClazz;
         }
     }
 
+    public void setDialectType(String dialectType) {
+        this.dialectType = dialectType;
+    }
+
     public void setDialectClazz(String dialectClazz) {
         this.dialectClazz = dialectClazz;
     }

+ 3 - 1
src/main/java/com/baomidou/mybatisplus/toolkit/GlobalConfigUtils.java

@@ -189,7 +189,9 @@ public class GlobalConfigUtils {
             // 设置全局关键字
             globalConfig.setSqlKeywords(connection.getMetaData().getSQLKeywords());
             // 自动设置数据库类型
-            globalConfig.setDbType(jdbcUrl);
+            if (globalConfig.getDbType() == null) {
+                globalConfig.setDbTypeOfJdbcUrl(jdbcUrl);
+            }
         } catch (Exception e) {
             throw new MybatisPlusException("Error: GlobalConfigUtils setMetaData Fail !  Cause:" + e);
         }

+ 3 - 3
src/main/java/com/baomidou/mybatisplus/toolkit/JdbcUtils.java

@@ -50,9 +50,9 @@ public class JdbcUtils {
             return DBType.MYSQL;
         } else if (jdbcUrl.startsWith("jdbc:oracle:") || jdbcUrl.startsWith("jdbc:log4jdbc:oracle:")) {
             return DBType.ORACLE;
-        } else if (jdbcUrl.startsWith("jdbc:microsoft:") || jdbcUrl.startsWith("jdbc:log4jdbc:microsoft:")) {
-            return DBType.SQLSERVER;
-        } else if (jdbcUrl.startsWith("jdbc:sqlserver:") || jdbcUrl.startsWith("jdbc:log4jdbc:sqlserver:")) {
+        } else if (jdbcUrl.startsWith("jdbc:sqlserver:") || jdbcUrl.startsWith("jdbc:microsoft:") ) {
+            return DBType.SQLSERVER2005;
+        } else if (jdbcUrl.startsWith("jdbc:sqlserver2012:")) {
             return DBType.SQLSERVER;
         } else if (jdbcUrl.startsWith("jdbc:postgresql:") || jdbcUrl.startsWith("jdbc:log4jdbc:postgresql:")) {
             return DBType.POSTGRE;