From a368ab544db500d7d2bdecda4ba3a7fdc22bbead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E8=8B=A5=E7=91=9C?= <278442033@qq.com> Date: Fri, 20 Jun 2025 00:47:21 +0800 Subject: [PATCH] =?UTF-8?q?Db=E6=B7=BB=E5=8A=A0FetchSize=E7=9A=84=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E8=AE=BE=E7=BD=AE=EF=BC=8C=E7=94=A8=E6=88=B7=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=A0=B9=E6=8D=AE=E5=86=85=E5=AD=98=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E8=87=AA=E4=B8=BB=E8=B0=83=E8=8A=82JDBC=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E9=9B=86=E8=8E=B7=E5=8F=96=E7=9A=84=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=95=B0=E9=87=8F=EF=BC=8C=E6=B5=B7=E9=87=8F=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=8A=A0=E8=BD=BD=E6=97=B6=E5=8F=AF=E6=8F=90=E9=AB=98?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hutool-db/pom.xml | 2 +- hutool-db/src/main/java/cn/hutool/db/DbUtil.java | 8 ++++++++ .../src/main/java/cn/hutool/db/GlobalDbConfig.java | 12 ++++++++++++ .../src/main/java/cn/hutool/db/StatementUtil.java | 13 +++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/hutool-db/pom.xml b/hutool-db/pom.xml index eec202c0d..7d227dd77 100755 --- a/hutool-db/pom.xml +++ b/hutool-db/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.8.39-SNAPSHOT + 5.8.38 hutool-db diff --git a/hutool-db/src/main/java/cn/hutool/db/DbUtil.java b/hutool-db/src/main/java/cn/hutool/db/DbUtil.java index f96fbed9a..fb6b1d685 100644 --- a/hutool-db/src/main/java/cn/hutool/db/DbUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/DbUtil.java @@ -251,4 +251,12 @@ public final class DbUtil { public static void setDbSettingPathGlobal(String dbSettingPath) { GlobalDbConfig.setDbSettingPath(dbSettingPath); } + + /** + * 设置构造结果集时每次从数据库取到的行数 + * @param fetchSize 每一轮网络请求获取的行数 + */ + public static void setStatementFetchSizeGlobal(Integer fetchSize){ + GlobalDbConfig.setStatementFetchSize(fetchSize); + } } diff --git a/hutool-db/src/main/java/cn/hutool/db/GlobalDbConfig.java b/hutool-db/src/main/java/cn/hutool/db/GlobalDbConfig.java index 0c3ba4ba2..6df88544f 100644 --- a/hutool-db/src/main/java/cn/hutool/db/GlobalDbConfig.java +++ b/hutool-db/src/main/java/cn/hutool/db/GlobalDbConfig.java @@ -36,6 +36,10 @@ public class GlobalDbConfig { * @since 5.8.0 */ private static String dbSettingPath = null; + /** + * 自定义构造结果集时每次从数据库取的行数 + */ + protected static Integer statementFetchSize=null; /** * 设置全局是否在结果中忽略大小写
@@ -119,4 +123,12 @@ public class GlobalDbConfig { public static void setShowSql(boolean isShowSql, boolean isFormatSql, boolean isShowParams, Level level) { SqlLog.INSTANCE.init(isShowSql, isFormatSql, isShowParams, level); } + + /** + * 设置构造结果集时每次从数据库取到的行数 + * @param statementFetchSize 每一轮网络请求获取的行数 + */ + public static void setStatementFetchSize(Integer statementFetchSize) { + GlobalDbConfig.statementFetchSize = statementFetchSize; + } } diff --git a/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java b/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java index 3b5a87622..cabb9a1ec 100644 --- a/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java @@ -151,6 +151,7 @@ public class StatementUtil { } else { ps = conn.prepareStatement(sql); } + setFetchSize(ps); return fillParams(ps, params); } @@ -189,6 +190,7 @@ public class StatementUtil { fillParams(ps, new ArrayIter<>(params), nullTypeMap); ps.addBatch(); } + setFetchSize(ps); return ps; } @@ -215,6 +217,7 @@ public class StatementUtil { fillParams(ps, CollUtil.valuesOfKeys(entity, fields), nullTypeMap); ps.addBatch(); } + setFetchSize(ps); return ps; } @@ -392,5 +395,15 @@ public class StatementUtil { // 其它参数类型 ps.setObject(paramIndex, param); } + + /** + * 为{@link PreparedStatement} 设置FetchSize + * @param ps {@link PreparedStatement} + * @throws SQLException SQL异常 + */ + private static void setFetchSize(PreparedStatement ps) throws SQLException { + if(GlobalDbConfig.statementFetchSize!=null) + ps.setFetchSize(GlobalDbConfig.statementFetchSize); + } //--------------------------------------------------------------------------------------------- Private method end }