Ver código fonte

支持 mariadb 去掉多个方法对象静态初始化减少启动内存消耗

hubin 7 anos atrás
pai
commit
414fa68e1a
13 arquivos alterados com 102 adições e 42 exclusões
  1. 4 0
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/enums/DBType.java
  2. 59 31
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactory.java
  3. 0 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/DB2Dialect.java
  4. 0 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/H2Dialect.java
  5. 0 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/HSQLDialect.java
  6. 37 0
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/MariaDBDialect.java
  7. 0 2
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/MySqlDialect.java
  8. 0 2
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/OracleDialect.java
  9. 0 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/PostgreDialect.java
  10. 0 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLServer2005Dialect.java
  11. 0 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLServerDialect.java
  12. 0 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLiteDialect.java
  13. 2 0
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/JdbcUtils.java

+ 4 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/enums/DBType.java

@@ -32,6 +32,10 @@ public enum DBType implements IDBType {
      * MYSQL
      */
     MYSQL("mysql", "`%s`", "MySql数据库"),
+    /**
+     * MARIADB
+     */
+    MARIADB("mariadb", "`%s`", "MariaDB数据库"),
     /**
      * ORACLE
      */

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

@@ -15,10 +15,14 @@
  */
 package com.baomidou.mybatisplus.extension.plugins.pagination;
 
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 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.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.pagination.PageHelper;
 import com.baomidou.mybatisplus.core.pagination.Pagination;
 import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
@@ -27,6 +31,7 @@ import com.baomidou.mybatisplus.extension.enums.DBType;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.DB2Dialect;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.H2Dialect;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.HSQLDialect;
+import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.MariaDBDialect;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.MySqlDialect;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.OracleDialect;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.PostgreDialect;
@@ -44,6 +49,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.SQLiteDial
  * @Date 2016-01-23
  */
 public class DialectFactory {
+    /**
+     * 方言缓存
+     */
+    private static final Map<String, IDialect> dialectCache = new ConcurrentHashMap<>();
 
     /**
      * <p>
@@ -91,18 +100,29 @@ public class DialectFactory {
      * @throws Exception
      */
     private static IDialect getDialect(IDBType dbType, String dialectClazz) throws Exception {
-        IDialect dialect = null;
-        if (StringUtils.isNotEmpty(dialectClazz)) {
-            try {
-                Class<?> clazz = Class.forName(dialectClazz);
-                if (IDialect.class.isAssignableFrom(clazz)) {
-                    dialect = (IDialect) clazz.newInstance();
+        IDialect dialect = dialectCache.get(dbType.getDb());
+        if (null == dialect) {
+            // 自定义方言
+            dialect = dialectCache.get(dialectClazz);
+            if (null != dialect) {
+                return dialect;
+            }
+
+            // 缓存方言
+            if (StringUtils.isNotEmpty(dialectClazz)) {
+                try {
+                    Class<?> clazz = Class.forName(dialectClazz);
+                    if (IDialect.class.isAssignableFrom(clazz)) {
+                        dialect = (IDialect) clazz.newInstance();
+                        dialectCache.put(dialectClazz, dialect);
+                    }
+                } catch (ClassNotFoundException e) {
+                    throw new MybatisPlusException("Class :" + dialectClazz + " is not found");
                 }
-            } catch (ClassNotFoundException e) {
-                throw new MybatisPlusException("Class :" + dialectClazz + " is not found");
+            } else {
+                dialect = getDialectByDbType(dbType);
+                dialectCache.put(dbType.getDb(), dialect);
             }
-        } else if (null != dbType) {
-            dialect = getDialectByDbType(dbType);
         }
         /* 未配置方言则抛出异常 */
         if (dialect == null) {
@@ -121,29 +141,37 @@ public class DialectFactory {
      * @throws Exception
      */
     private static IDialect getDialectByDbType(IDBType dbType) {
-        IDialect dialect;
         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 new MySqlDialect();
         }
-        return dialect;
+        if (dbType == DBType.MARIADB) {
+            return new MariaDBDialect();
+        }
+        if (dbType == DBType.ORACLE) {
+            return new OracleDialect();
+        }
+        if (dbType == DBType.DB2) {
+            return new DB2Dialect();
+        }
+        if (dbType == DBType.H2) {
+            return new H2Dialect();
+        }
+        if (dbType == DBType.SQLSERVER) {
+            return new SQLServerDialect();
+        }
+        if (dbType == DBType.SQLSERVER2005) {
+            return new SQLServer2005Dialect();
+        }
+        if (dbType == DBType.POSTGRE) {
+            return new PostgreDialect();
+        }
+        if (dbType == DBType.HSQL) {
+            return new HSQLDialect();
+        }
+        if (dbType == DBType.SQLITE) {
+            return new SQLiteDialect();
+        }
+        throw new MybatisPlusException("The Database's Not Supported! DBType:" + dbType);
     }
 
 }

+ 0 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/DB2Dialect.java

@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class DB2Dialect implements IDialect {
 
-    public static final DB2Dialect INSTANCE = new DB2Dialect();
 
     private static String getRowNumber(String originalSql) {
         StringBuilder rownumber = new StringBuilder(50).append("rownumber() over(");

+ 0 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/H2Dialect.java

@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class H2Dialect implements IDialect {
 
-    public static final H2Dialect INSTANCE = new H2Dialect();
 
     @Override
     public String buildPaginationSql(String originalSql, int offset, int limit) {

+ 0 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/HSQLDialect.java

@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class HSQLDialect implements IDialect {
 
-    public static final HSQLDialect INSTANCE = new HSQLDialect();
 
     @Override
     public String buildPaginationSql(String originalSql, int offset, int limit) {

+ 37 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/MariaDBDialect.java

@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2011-2014, hubin (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
+
+
+import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
+
+/**
+ * <p>
+ * MariaDB 数据库分页语句组装实现
+ * </p>
+ *
+ * @author Caratacus
+ * @Date 2018-04-24
+ */
+public class MariaDBDialect implements IDialect {
+
+    @Override
+    public String buildPaginationSql(String originalSql, int offset, int limit) {
+        StringBuilder sql = new StringBuilder(originalSql);
+        sql.append(" LIMIT ").append(offset).append(",").append(limit);
+        return sql.toString();
+    }
+}

+ 0 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/MySqlDialect.java

@@ -28,8 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class MySqlDialect implements IDialect {
 
-    public static final MySqlDialect INSTANCE = new MySqlDialect();
-
     @Override
     public String buildPaginationSql(String originalSql, int offset, int limit) {
         StringBuilder sql = new StringBuilder(originalSql);

+ 0 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/OracleDialect.java

@@ -28,8 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class OracleDialect implements IDialect {
 
-    public static final OracleDialect INSTANCE = new OracleDialect();
-
     @Override
     public String buildPaginationSql(String originalSql, int offset, int limit) {
         StringBuilder sql = new StringBuilder();

+ 0 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/PostgreDialect.java

@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class PostgreDialect implements IDialect {
 
-    public static final PostgreDialect INSTANCE = new PostgreDialect();
 
     @Override
     public String buildPaginationSql(String originalSql, int offset, int limit) {

+ 0 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLServer2005Dialect.java

@@ -29,7 +29,6 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  */
 public class SQLServer2005Dialect implements IDialect {
 
-    public static final SQLServer2005Dialect INSTANCE = new SQLServer2005Dialect();
 
     private static String getOrderByPart(String sql) {
         String loweredString = sql.toLowerCase();

+ 0 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLServerDialect.java

@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class SQLServerDialect implements IDialect {
 
-    public static final SQLServerDialect INSTANCE = new SQLServerDialect();
 
     @Override
     public String buildPaginationSql(String originalSql, int offset, int limit) {

+ 0 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLiteDialect.java

@@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.pagination.dialect.IDialect;
  */
 public class SQLiteDialect implements IDialect {
 
-    public static final SQLiteDialect INSTANCE = new SQLiteDialect();
 
     @Override
     public String buildPaginationSql(String originalSql, int offset, int limit) {

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

@@ -50,6 +50,8 @@ public class JdbcUtils {
         if (jdbcUrl.startsWith("jdbc:mysql:") || jdbcUrl.startsWith("jdbc:cobar:")
             || jdbcUrl.startsWith("jdbc:log4jdbc:mysql:")) {
             return DBType.MYSQL;
+        } else if (jdbcUrl.startsWith("jdbc:mariadb:")) {
+            return DBType.MARIADB;
         } else if (jdbcUrl.startsWith("jdbc:oracle:") || jdbcUrl.startsWith("jdbc:log4jdbc:oracle:")) {
             return DBType.ORACLE;
         } else if (jdbcUrl.startsWith("jdbc:sqlserver:") || jdbcUrl.startsWith("jdbc:microsoft:")) {