From 4613d47c843ea5c8cd5e6ca0f200aa5790b5d2c0 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 30 Apr 2022 23:54:16 +0800 Subject: [PATCH] fix code --- .../src/main/java/cn/hutool/db/AbstractDb.java | 15 +++++++++++++-- .../main/java/cn/hutool/db/dialect/Dialect.java | 3 +-- .../cn/hutool/db/dialect/impl/AnsiSqlDialect.java | 2 +- .../java/cn/hutool/db/handler/EntityHandler.java | 2 +- .../java/cn/hutool/db/handler/ResultSetUtil.java | 10 +++++----- .../src/main/java/cn/hutool/db/sql/Query.java | 11 ++++++++++- hutool-db/src/test/java/cn/hutool/db/DbTest.java | 10 ++++++++++ 7 files changed, 41 insertions(+), 12 deletions(-) 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 e610eabe7..7397d4f45 100755 --- a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java +++ b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java @@ -6,8 +6,8 @@ import cn.hutool.db.dialect.Dialect; import cn.hutool.db.handler.BeanListHandler; import cn.hutool.db.handler.EntityHandler; import cn.hutool.db.handler.EntityListHandler; -import cn.hutool.db.handler.ResultSetUtil; import cn.hutool.db.handler.NumberHandler; +import cn.hutool.db.handler.ResultSetUtil; import cn.hutool.db.handler.RsHandler; import cn.hutool.db.handler.StringHandler; import cn.hutool.db.sql.Condition; @@ -673,10 +673,21 @@ public abstract class AbstractDb> implements ConnectionH * @throws DbRuntimeException SQL执行异常 */ public long count(final Entity where) throws DbRuntimeException { + return count(where, null); + } + + /** + * 结果的条目数 + * + * @param where 查询条件 + * @return 复合条件的结果数 + * @throws DbRuntimeException SQL执行异常 + */ + public long count(final Entity where, final Page page) throws DbRuntimeException { Connection conn = null; try { conn = this.getConnection(); - return runner.count(conn, Query.of(where)); + return runner.count(conn, Query.of(where).setPage(page)); } finally { this.closeConnection(conn); } diff --git a/hutool-db/src/main/java/cn/hutool/db/dialect/Dialect.java b/hutool-db/src/main/java/cn/hutool/db/dialect/Dialect.java index 2686adeae..921d3ad4d 100644 --- a/hutool-db/src/main/java/cn/hutool/db/dialect/Dialect.java +++ b/hutool-db/src/main/java/cn/hutool/db/dialect/Dialect.java @@ -134,8 +134,7 @@ public interface Dialect extends Serializable { * @throws SQLException SQL执行异常 */ default PreparedStatement psForCount(final Connection conn, final Query query) throws SQLException { - query.setFields(ListUtil.toList("count(1)")); - return psForFind(conn, query); + return psForFind(conn, query.clone().setFields(ListUtil.toList("count(1)"))); } /** diff --git a/hutool-db/src/main/java/cn/hutool/db/dialect/impl/AnsiSqlDialect.java b/hutool-db/src/main/java/cn/hutool/db/dialect/impl/AnsiSqlDialect.java index 890ba8f8b..a6361a698 100644 --- a/hutool-db/src/main/java/cn/hutool/db/dialect/impl/AnsiSqlDialect.java +++ b/hutool-db/src/main/java/cn/hutool/db/dialect/impl/AnsiSqlDialect.java @@ -2,8 +2,8 @@ package cn.hutool.db.dialect.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.db.DbRuntimeException; import cn.hutool.db.Entity; import cn.hutool.db.Page; diff --git a/hutool-db/src/main/java/cn/hutool/db/handler/EntityHandler.java b/hutool-db/src/main/java/cn/hutool/db/handler/EntityHandler.java index c6ea3453a..873d8e14f 100644 --- a/hutool-db/src/main/java/cn/hutool/db/handler/EntityHandler.java +++ b/hutool-db/src/main/java/cn/hutool/db/handler/EntityHandler.java @@ -47,6 +47,6 @@ public class EntityHandler implements RsHandler{ final ResultSetMetaData meta = rs.getMetaData(); final int columnCount = meta.getColumnCount(); - return rs.next() ? ResultSetUtil.toBean(columnCount, meta, rs, this.caseInsensitive) : null; + return rs.next() ? ResultSetUtil.toEntity(columnCount, meta, rs, this.caseInsensitive) : null; } } diff --git a/hutool-db/src/main/java/cn/hutool/db/handler/ResultSetUtil.java b/hutool-db/src/main/java/cn/hutool/db/handler/ResultSetUtil.java index 5f705810f..925098e06 100644 --- a/hutool-db/src/main/java/cn/hutool/db/handler/ResultSetUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/handler/ResultSetUtil.java @@ -116,7 +116,7 @@ public class ResultSetUtil { * @throws SQLException SQL执行异常 */ public static Entity toEntity(final int columnCount, final ResultSetMetaData meta, final ResultSet rs) throws SQLException { - return toBean(columnCount, meta, rs, false); + return toEntity(columnCount, meta, rs, false); } /** @@ -130,8 +130,8 @@ public class ResultSetUtil { * @throws SQLException SQL执行异常 * @since 4.5.16 */ - public static Entity toBean(final int columnCount, final ResultSetMetaData meta, final ResultSet rs, final boolean caseInsensitive) throws SQLException { - return toBean(new Entity(null, caseInsensitive), columnCount, meta, rs, true); + public static Entity toEntity(final int columnCount, final ResultSetMetaData meta, final ResultSet rs, final boolean caseInsensitive) throws SQLException { + return toEntity(new Entity(null, caseInsensitive), columnCount, meta, rs, true); } /** @@ -147,7 +147,7 @@ public class ResultSetUtil { * @throws SQLException SQL执行异常 * @since 3.3.1 */ - public static T toBean(final T row, final int columnCount, final ResultSetMetaData meta, final ResultSet rs, final boolean withMetaInfo) throws SQLException { + public static T toEntity(final T row, final int columnCount, final ResultSetMetaData meta, final ResultSet rs, final boolean withMetaInfo) throws SQLException { int type; for (int i = 1; i <= columnCount; i++) { type = meta.getColumnType(i); @@ -226,7 +226,7 @@ public class ResultSetUtil { final int columnCount = meta.getColumnCount(); while (rs.next()) { - collection.add(ResultSetUtil.toBean(columnCount, meta, rs, caseInsensitive)); + collection.add(toEntity(columnCount, meta, rs, caseInsensitive)); } return collection; diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/Query.java b/hutool-db/src/main/java/cn/hutool/db/sql/Query.java index 5f2dcc97b..966984027 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/Query.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/Query.java @@ -16,7 +16,7 @@ import java.util.Collection; * @author Looly * */ -public class Query { +public class Query implements Cloneable { /** 查询的字段名列表 */ Collection fields; @@ -190,4 +190,13 @@ public class Query { } return this.tableNames[0]; } + + @Override + public Query clone() { + try { + return (Query) super.clone(); + } catch (final CloneNotSupportedException e) { + throw new AssertionError(); + } + } } 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 e0d26377c..89a2f1f33 100644 --- a/hutool-db/src/test/java/cn/hutool/db/DbTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/DbTest.java @@ -36,12 +36,22 @@ public class DbTest { // 测试数据库中一共4条数据,第0页有3条,第1页有1条 final List page0 = Db.of().page(Entity.create("user"), Page.of(0, 3)); Assert.assertEquals(3, page0.size()); + final List page1 = Db.of().page(Entity.create("user"), Page.of(1, 3)); Assert.assertEquals(1, page1.size()); } @Test public void pageTest2() { + final long count = Db.of().count(Entity.create("user"), Page.of(1, 3)); + Assert.assertEquals(1, count); + + final List page1 = Db.of().page(Entity.create("user"), Page.of(1, 3)); + Assert.assertEquals(1, page1.size()); + } + + @Test + public void pageBySqlTest() { final String sql = "select * from user order by name"; // 测试数据库中一共4条数据,第0页有3条,第1页有1条 final List page0 = Db.of().page(