Ver código fonte

3.0 分包 - solve globalConfiguration set metadata

yuxiaobin 7 anos atrás
pai
commit
fe647c93a6

+ 2 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/enums/IDBType.java

@@ -12,4 +12,6 @@ public interface IDBType {
 
     //TODO: 3.0
     public String getQuote();
+
+    public String getDb();
 }

+ 3 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/GlobalConfiguration.java

@@ -162,9 +162,9 @@ public class GlobalConfiguration implements Serializable {
 //    }
 
     //TODO 3.0 通过其他途径设置dbType
-//    public void setDbType(String dbType) {
-//        this.dbType = DBType.getDBType(dbType);
-//    }
+    public void setDbType(IDBType dbType) {
+        this.dbType = dbType;
+    }
 
     public IdType getIdType() {
         return idType;

+ 2 - 7
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/GlobalConfigUtils.java

@@ -179,20 +179,15 @@ public class GlobalConfigUtils {
      * <p>
      * 设置元数据相关属性
      * </p>
-     *
+     * @deprecated 3.0
      * @param dataSource   数据源
      * @param globalConfig 全局配置
      */
+    @Deprecated
     public static void setMetaData(DataSource dataSource, GlobalConfiguration globalConfig) {
         try (Connection connection = dataSource.getConnection()) {
-            String jdbcUrl = connection.getMetaData().getURL();
             // 设置全局关键字
             globalConfig.setSqlKeywords(connection.getMetaData().getSQLKeywords());
-            // 自动设置数据库类型
-            if (globalConfig.getDbType() == null) {
-                //TODO: 3.0 set jdbcurl
-//                globalConfig.setDbTypeOfJdbcUrl(jdbcUrl);
-            }
         } catch (Exception e) {
             throw new MybatisPlusException("Error: GlobalConfigUtils setMetaData Fail !  Cause:" + e);
         }

+ 2 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/enums/DBType.java

@@ -15,6 +15,7 @@
  */
 package com.baomidou.mybatisplus.extension.enums;
 
+import com.baomidou.mybatisplus.core.enums.IDBType;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 
 /**
@@ -26,7 +27,7 @@ import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
  * @Date 2016-04-15
  */
 //TODO: 3.0 如何在GlobalConfiguration里面支持?
-public enum DBType {
+public enum DBType implements IDBType{
     /**
      * MYSQL
      */

+ 4 - 3
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PaginationInterceptor.java

@@ -37,10 +37,11 @@ import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
 import org.apache.ibatis.session.RowBounds;
 
 import com.baomidou.mybatisplus.core.MybatisDefaultParameterHandler;
-import com.baomidou.mybatisplus.core.parser.ISqlParser;
-import com.baomidou.mybatisplus.core.parser.SqlInfo;
+import com.baomidou.mybatisplus.core.enums.IDBType;
 import com.baomidou.mybatisplus.core.pagination.PageHelper;
 import com.baomidou.mybatisplus.core.pagination.Pagination;
+import com.baomidou.mybatisplus.core.parser.ISqlParser;
+import com.baomidou.mybatisplus.core.parser.SqlInfo;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
@@ -118,7 +119,7 @@ public class PaginationInterceptor extends SqlParserHandler implements Intercept
         String originalSql = boundSql.getSql();
         Connection connection = (Connection) invocation.getArgs()[0];
         //TODO: 3.0
-        DBType dbType = StringUtils.isNotEmpty(dialectType) ? DBType.getDBType(dialectType) : JdbcUtils.getDbType(connection.getMetaData().getURL());
+        IDBType dbType = StringUtils.isNotEmpty(dialectType) ? DBType.getDBType(dialectType) : JdbcUtils.getDbType(connection.getMetaData().getURL());
         if (rowBounds instanceof Pagination) {
             Pagination page = (Pagination) rowBounds;
             boolean orderBy = true;

+ 25 - 34
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactory.java

@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.extension.plugins.pagination;
 
 import org.apache.ibatis.session.RowBounds;
 
+import com.baomidou.mybatisplus.core.enums.IDBType;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.pagination.PageHelper;
 import com.baomidou.mybatisplus.core.pagination.Pagination;
@@ -56,7 +57,7 @@ public class DialectFactory {
      * @return
      * @throws Exception
      */
-    public static String buildPaginationSql(Pagination page, String buildSql, DBType dbType, String dialectClazz)
+    public static String buildPaginationSql(Pagination page, String buildSql, IDBType dbType, String dialectClazz)
         throws Exception {
         // fix #172, 196
         return getDialect(dbType, dialectClazz).buildPaginationSql(buildSql, PageHelper.offsetCurrent(page), page.getSize());
@@ -73,7 +74,7 @@ public class DialectFactory {
      * @return
      * @throws Exception
      */
-    public static String buildPaginationSql(RowBounds rowBounds, String buildSql, DBType dbType, String dialectClazz)
+    public static String buildPaginationSql(RowBounds rowBounds, String buildSql, IDBType dbType, String dialectClazz)
         throws Exception {
         // fix #196
         return getDialect(dbType, dialectClazz).buildPaginationSql(buildSql, rowBounds.getOffset(), rowBounds.getLimit());
@@ -89,7 +90,7 @@ public class DialectFactory {
      * @return
      * @throws Exception
      */
-    private static IDialect getDialect(DBType dbType, String dialectClazz) throws Exception {
+    private static IDialect getDialect(IDBType dbType, String dialectClazz) throws Exception {
         IDialect dialect = null;
         if (StringUtils.isNotEmpty(dialectClazz)) {
             try {
@@ -119,38 +120,28 @@ public class DialectFactory {
      * @return
      * @throws Exception
      */
-    private static IDialect getDialectByDbtype(DBType dbType) {
+    private static IDialect getDialectByDbtype(IDBType dbType) {
         IDialect dialect;
-        switch (dbType) {
-            case MYSQL:
-                dialect = MySqlDialect.INSTANCE;
-                break;
-            case ORACLE:
-                dialect = OracleDialect.INSTANCE;
-                break;
-            case DB2:
-                dialect = DB2Dialect.INSTANCE;
-                break;
-            case H2:
-                dialect = H2Dialect.INSTANCE;
-                break;
-            case SQLSERVER:
-                dialect = SQLServerDialect.INSTANCE;
-                break;
-            case SQLSERVER2005:
-                dialect = SQLServer2005Dialect.INSTANCE;
-                break;
-            case POSTGRE:
-                dialect = PostgreDialect.INSTANCE;
-                break;
-            case HSQL:
-                dialect = HSQLDialect.INSTANCE;
-                break;
-            case SQLITE:
-                dialect = SQLiteDialect.INSTANCE;
-                break;
-            default:
-                throw new MybatisPlusException("The Database's Not Supported! DBType:" + dbType);
+        if (dbType == DBType.MYSQL) {
+            dialect = MySqlDialect.INSTANCE;
+        } else if (dbType == DBType.ORACLE) {
+            dialect = OracleDialect.INSTANCE;
+        } else if (dbType == DBType.DB2) {
+            dialect = DB2Dialect.INSTANCE;
+        } else if (dbType == DBType.H2) {
+            dialect = H2Dialect.INSTANCE;
+        } else if (dbType == DBType.SQLSERVER) {
+            dialect = SQLServerDialect.INSTANCE;
+        } else if (dbType == DBType.SQLSERVER2005) {
+            dialect = SQLServer2005Dialect.INSTANCE;
+        } else if (dbType == DBType.POSTGRE) {
+            dialect = PostgreDialect.INSTANCE;
+        } else if (dbType == DBType.HSQL) {
+            dialect = HSQLDialect.INSTANCE;
+        } else if (dbType == DBType.SQLITE) {
+            dialect = SQLiteDialect.INSTANCE;
+        } else {
+            throw new MybatisPlusException("The Database's Not Supported! DBType:" + dbType);
         }
         return dialect;
     }

+ 11 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/spring/MybatisSqlSessionFactoryBean.java

@@ -22,6 +22,7 @@ import static org.springframework.util.StringUtils.hasLength;
 import static org.springframework.util.StringUtils.tokenizeToStringArray;
 
 import java.io.IOException;
+import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.HashSet;
 import java.util.Properties;
@@ -64,6 +65,7 @@ import com.baomidou.mybatisplus.core.enums.IEnum;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.metadata.GlobalConfiguration;
 import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
 import com.baomidou.mybatisplus.extension.toolkit.PackageHelper;
 import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
 
@@ -383,6 +385,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
             "Property 'configuration' and 'configLocation' can not specified with together");
 
         this.sqlSessionFactory = buildSqlSessionFactory();
+        //TODO: 3.0 注入到globalConfig
     }
 
     /**
@@ -557,7 +560,14 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
 
         configuration.setEnvironment(new Environment(this.environment, this.transactionFactory, this.dataSource));
         // 设置元数据相关
-        GlobalConfigUtils.setMetaData(dataSource, globalConfig);
+//        GlobalConfigUtils.setMetaData(dataSource, globalConfig);
+        try (Connection connection = dataSource.getConnection()) {
+            // 设置全局关键字
+            globalConfig.setSqlKeywords(connection.getMetaData().getSQLKeywords());
+            globalConfig.setDbType(JdbcUtils.getDbType(connection.getMetaData().getURL()));
+        } catch (Exception e) {
+            throw new MybatisPlusException("Error: GlobalConfigUtils setMetaData Fail !  Cause:" + e);
+        }
         SqlSessionFactory sqlSessionFactory = this.sqlSessionFactoryBuilder.build(configuration);
         // TODO SqlRunner
         SqlRunner.FACTORY = sqlSessionFactory;

+ 2 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/JdbcUtils.java

@@ -18,6 +18,7 @@ package com.baomidou.mybatisplus.extension.toolkit;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
 
+import com.baomidou.mybatisplus.core.enums.IDBType;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.enums.DBType;
@@ -42,7 +43,7 @@ public class JdbcUtils {
      * @param jdbcUrl 连接地址
      * @return
      */
-    public static DBType getDbType(String jdbcUrl) {
+    public static IDBType getDbType(String jdbcUrl) {
         if (StringUtils.isEmpty(jdbcUrl)) {
             throw new MybatisPlusException("Error: The jdbcUrl is Null, Cannot read database type");
         }

+ 2 - 2
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplys/extension/test/h2/config/MybatisPlusConfig.java

@@ -28,7 +28,7 @@ import com.baomidou.mybatisplys.extension.test.h2.H2MetaObjectHandler;
  * @date 2017/4/1
  */
 @Configuration
-@MapperScan("com.baomidou.mybatisplus.test.h2.entity.mapper")
+@MapperScan("com.baomidou.mybatisplys.extension.test.h2.entity.mapper")
 public class MybatisPlusConfig {
 
     @Bean("mybatisSqlSession")
@@ -36,7 +36,7 @@ public class MybatisPlusConfig {
         MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
         sqlSessionFactory.setDataSource(dataSource);
 //        sqlSessionFactory.setConfigLocation(resourceLoader.getResource("classpath:mybatis-config.xml"));
-        sqlSessionFactory.setTypeAliasesPackage("com.baomidou.mybatisplus.test.h2.entity.persistent");
+        sqlSessionFactory.setTypeAliasesPackage("com.baomidou.mybatisplus.extension.test.h2.entity.persistent");
         MybatisConfiguration configuration = new MybatisConfiguration();
 //        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
 //        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();