diff --git a/CHANGELOG.md b/CHANGELOG.md index edfc632f3..bbcd3b523 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ * 【extra 】 Sftp增加download重载(issue#I3VBSL@Gitee) ### 🐞Bug修复 +* 【db 】 修复count方法丢失参数问题(issue#I3VBSL@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java index 9f533aa31..51d8e3d91 100644 --- a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java +++ b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java @@ -682,7 +682,7 @@ public abstract class AbstractDb implements Serializable { Connection conn = null; try { conn = this.getConnection(); - return runner.count(conn, sql.build(), sql.getParamValueArray()); + return runner.count(conn, sql); } finally { this.closeConnection(conn); } diff --git a/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java b/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java index ee63db2e7..3cac0b63f 100644 --- a/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java +++ b/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java @@ -280,6 +280,19 @@ public class SqlConnRunner extends DialectRunner { return findAll(conn, Entity.create(tableName).set(field, values)); } + /** + * 获取查询结果总数,生成类似于 SELECT count(1) from (sql) as _count + * + * @param conn 数据库连接对象 + * @param sqlBuilder SQL构建器,包括SQL和参数 + * @return 结果数 + * @throws SQLException SQL异常 + * @since 5.7.0 + */ + public long count(Connection conn, SqlBuilder sqlBuilder) throws SQLException { + return count(conn, sqlBuilder.build(), sqlBuilder.getParamValueArray()); + } + /** * 获取查询结果总数,生成类似于 SELECT count(1) from (sql) as _count * @@ -337,7 +350,7 @@ public class SqlConnRunner extends DialectRunner { */ public PageResult page(Connection conn, SqlBuilder sqlBuilder, Page page) throws SQLException { final PageResultHandler pageResultHandler = new PageResultHandler( - new PageResult<>(page.getPageNumber(), page.getPageSize(), (int) count(conn, sqlBuilder.build())), + new PageResult<>(page.getPageNumber(), page.getPageSize(), (int) count(conn, sqlBuilder)), this.caseInsensitive); return page(conn, sqlBuilder, page, pageResultHandler); } diff --git a/hutool-db/src/test/java/cn/hutool/db/DbTest.java b/hutool-db/src/test/java/cn/hutool/db/DbTest.java index e599d3146..7ab8db26f 100644 --- a/hutool-db/src/test/java/cn/hutool/db/DbTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/DbTest.java @@ -50,6 +50,17 @@ public class DbTest { Assert.assertEquals(1, page1.size()); } + @Test + public void pageWithParamsTest() throws SQLException { + String sql = "select * from user where name = ?"; + PageResult result = Db.use().page( + sql, Page.of(0, 3), "张三"); + + Assert.assertEquals(2, result.getTotal()); + Assert.assertEquals(1, result.getTotalPage()); + Assert.assertEquals(2, result.size()); + } + @Test public void countTest() throws SQLException { final long count = Db.use().count("select * from user");