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
}