diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/DaoTemplate.java b/hutool-db/src/main/java/org/dromara/hutool/db/DaoTemplate.java
index 27867532e..f24c4dfb3 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/DaoTemplate.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/DaoTemplate.java
@@ -23,8 +23,10 @@ import java.util.List;
/**
* 数据访问层模板
* 此模板用于简化对指定表的操作,简化的操作如下:
- * 1、在初始化时指定了表名,CRUD操作时便不需要表名
+ *
+ * 1、在初始化时指定了表名,CRUD操作时便不需要表名
* 2、在初始化时指定了主键,某些需要主键的操作便不需要指定主键类型
+ *
*
* @author Looly
*/
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java b/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java
index 4488daf62..157993775 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java
@@ -22,11 +22,7 @@ import org.dromara.hutool.db.dialect.DialectFactory;
import org.dromara.hutool.db.handler.NumberHandler;
import org.dromara.hutool.db.handler.PageResultHandler;
import org.dromara.hutool.db.handler.RsHandler;
-import org.dromara.hutool.db.sql.Query;
-import org.dromara.hutool.db.sql.SqlBuilder;
-import org.dromara.hutool.db.sql.SqlExecutor;
-import org.dromara.hutool.db.sql.SqlUtil;
-import org.dromara.hutool.db.sql.QuoteWrapper;
+import org.dromara.hutool.db.sql.*;
import java.io.Serializable;
import java.sql.Connection;
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/StatementUtil.java b/hutool-db/src/main/java/org/dromara/hutool/db/StatementUtil.java
index b656bf8eb..c4e255d38 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/StatementUtil.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/StatementUtil.java
@@ -13,30 +13,16 @@
package org.dromara.hutool.db;
import org.dromara.hutool.core.collection.iter.ArrayIter;
-import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.lang.Assert;
-import org.dromara.hutool.core.map.MapUtil;
-import org.dromara.hutool.core.text.StrUtil;
-import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.db.handler.ResultSetUtil;
import org.dromara.hutool.db.handler.RsHandler;
-import org.dromara.hutool.db.sql.NamedSql;
import org.dromara.hutool.db.sql.SqlBuilder;
import org.dromara.hutool.db.sql.SqlLog;
-import org.dromara.hutool.db.sql.SqlUtil;
+import org.dromara.hutool.db.sql.StatementBuilder;
+import org.dromara.hutool.db.sql.StatementWrapper;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.CallableStatement;
-import java.sql.Connection;
-import java.sql.ParameterMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.sql.Types;
+import java.sql.*;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -47,56 +33,6 @@ import java.util.Map;
* @since 4.0.10
*/
public class StatementUtil {
- /**
- * 填充SQL的参数。
- *
- * @param ps PreparedStatement
- * @param params SQL参数
- * @return {@link PreparedStatement}
- * @throws SQLException SQL执行异常
- */
- public static PreparedStatement fillParams(final PreparedStatement ps, final Object... params) throws SQLException {
- if (ArrayUtil.isEmpty(params)) {
- return ps;
- }
- return fillParams(ps, new ArrayIter<>(params));
- }
-
- /**
- * 填充SQL的参数。
- * 对于日期对象特殊处理:传入java.util.Date默认按照Timestamp处理
- *
- * @param ps PreparedStatement
- * @param params SQL参数
- * @return {@link PreparedStatement}
- * @throws SQLException SQL执行异常
- */
- public static PreparedStatement fillParams(final PreparedStatement ps, final Iterable> params) throws SQLException {
- return fillParams(ps, params, null);
- }
-
- /**
- * 填充SQL的参数。
- * 对于日期对象特殊处理:传入java.util.Date默认按照Timestamp处理
- *
- * @param ps PreparedStatement
- * @param params SQL参数
- * @param nullTypeCache null参数的类型缓存,避免循环中重复获取类型
- * @return {@link PreparedStatement}
- * @throws SQLException SQL执行异常
- * @since 4.6.7
- */
- public static PreparedStatement fillParams(final PreparedStatement ps, final Iterable> params, final Map nullTypeCache) throws SQLException {
- if (null == params) {
- return ps;// 无参数
- }
-
- int paramIndex = 1;//第一个参数从1计数
- for (final Object param : params) {
- setParam(ps, paramIndex++, param, nullTypeCache);
- }
- return ps;
- }
/**
* 创建{@link PreparedStatement}
@@ -135,26 +71,14 @@ public class StatementUtil {
* @throws SQLException SQL异常
* @since 3.2.3
*/
- public static PreparedStatement prepareStatement(final Connection conn, String sql, Object... params) throws SQLException {
- Assert.notBlank(sql, "Sql String must be not blank!");
- sql = sql.trim();
-
- if(ArrayUtil.isNotEmpty(params) && 1 == params.length && params[0] instanceof Map){
- // 检查参数是否为命名方式的参数
- final NamedSql namedSql = new NamedSql(sql, Convert.toMap(String.class, Object.class, params[0]));
- sql = namedSql.getSql();
- params = namedSql.getParams();
- }
-
- SqlLog.INSTANCE.log(sql, ArrayUtil.isEmpty(params) ? null : params);
- final PreparedStatement ps;
- if (GlobalDbConfig.returnGeneratedKey && StrUtil.startWithIgnoreCase(sql, "insert")) {
- // 插入默认返回主键
- ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
- } else {
- ps = conn.prepareStatement(sql);
- }
- return fillParams(ps, params);
+ public static PreparedStatement prepareStatement(final Connection conn, final String sql, final Object... params) throws SQLException {
+ return StatementBuilder.of()
+ .setConnection(conn)
+ .setReturnGeneratedKey(GlobalDbConfig.returnGeneratedKey)
+ .setSqlLog(SqlLog.INSTANCE)
+ .setSql(sql)
+ .setParams(params)
+ .build();
}
/**
@@ -181,18 +105,13 @@ public class StatementUtil {
* @throws SQLException SQL异常
* @since 4.1.13
*/
- public static PreparedStatement prepareStatementForBatch(final Connection conn, String sql, final Iterable