From a508f2d5aa7c1df3de22815325539d580fc09876 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 13 Mar 2020 16:18:11 +0800 Subject: [PATCH] fix PageUtil bug --- CHANGELOG.md | 1 + .../cn/hutool/core/collection/CollUtil.java | 4 +- .../java/cn/hutool/core/date/DateUtil.java | 73 +++++++++++++++++++ .../cn/hutool/core/date/TimeInterval.java | 7 ++ .../java/cn/hutool/core/util/PageUtil.java | 18 ++--- .../hutool/core/collection/CollUtilTest.java | 10 ++- .../src/main/java/cn/hutool/db/Page.java | 16 ++-- .../main/java/cn/hutool/db/PageResult.java | 12 +-- .../src/test/java/cn/hutool/db/DbTest.java | 9 +++ .../test/java/cn/hutool/db/FindBeanTest.java | 9 +-- pom.xml | 2 +- 11 files changed, 128 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83787372b..4f5fbcc1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### 新特性 ### Bug修复 +* 【core 】 修复PageUtil第一页语义不明确的问题(issue#782@Github) ------------------------------------------------------------------------------------------------------------- ## 5.2.2 diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index e3110bd4b..5e9d24337 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -2091,7 +2091,7 @@ public class CollUtil { * 采用{@link BoundedPriorityQueue}实现分页取局部 * * @param 集合元素类型 - * @param pageNo 页码,从1开始计数,0和1效果相同 + * @param pageNo 页码,从0开始计数,0表示第一页 * @param pageSize 每页的条目数 * @param comparator 比较器 * @param colls 集合数组 @@ -2114,7 +2114,7 @@ public class CollUtil { * 对指定List分页取值 * * @param 集合元素类型 - * @param pageNo 页码,从1开始计数,0和1效果相同 + * @param pageNo 页码,从0开始计数,0表示第一页 * @param pageSize 每页的条目数 * @param list 列表 * @return 分页后的段落内容 diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index bbbf11610..1d494c003 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -1753,6 +1753,79 @@ public class DateUtil { } + /** + * 计时器
+ * 计算某个过程花费的时间,精确到毫秒 + * + * @param isNano 是否使用纳秒计数,false则使用毫秒 + * @return Timer + * @since 5.2.3 + */ + public static TimeInterval timer(boolean isNano) { + return new TimeInterval(isNano); + } + + /** + * 创建秒表{@link StopWatch},用于对代码块的执行时间计数 + *

+ * 使用方法如下: + * + *

+	 * StopWatch stopWatch = DateUtil.createStopWatch();
+	 *
+	 * // 任务1
+	 * stopWatch.start("任务一");
+	 * Thread.sleep(1000);
+	 * stopWatch.stop();
+	 *
+	 * // 任务2
+	 * stopWatch.start("任务一");
+	 * Thread.sleep(2000);
+	 * stopWatch.stop();
+	 *
+	 * // 打印出耗时
+	 * Console.log(stopWatch.prettyPrint());
+	 *
+	 * 
+ * + * @return {@link StopWatch} + * @since 5.2.3 + */ + public static StopWatch createStopWatch() { + return new StopWatch(); + } + + /** + * 创建秒表{@link StopWatch},用于对代码块的执行时间计数 + *

+ * 使用方法如下: + * + *

+	 * StopWatch stopWatch = DateUtil.createStopWatch("任务名称");
+	 *
+	 * // 任务1
+	 * stopWatch.start("任务一");
+	 * Thread.sleep(1000);
+	 * stopWatch.stop();
+	 *
+	 * // 任务2
+	 * stopWatch.start("任务一");
+	 * Thread.sleep(2000);
+	 * stopWatch.stop();
+	 *
+	 * // 打印出耗时
+	 * Console.log(stopWatch.prettyPrint());
+	 *
+	 * 
+ * + * @param id 用于标识秒表的唯一ID + * @return {@link StopWatch} + * @since 5.2.3 + */ + public static StopWatch createStopWatch(String id) { + return new StopWatch(id); + } + /** * 生日转为年龄,计算法定年龄 * diff --git a/hutool-core/src/main/java/cn/hutool/core/date/TimeInterval.java b/hutool-core/src/main/java/cn/hutool/core/date/TimeInterval.java index fa103fb14..896c47de1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/TimeInterval.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/TimeInterval.java @@ -14,10 +14,17 @@ public class TimeInterval implements Serializable { private long time; private boolean isNano; + /** + * 构造,默认使用毫秒计数 + */ public TimeInterval() { this(false); } + /** + * 构造 + * @param isNano 是否使用纳秒计数,false则使用毫秒 + */ public TimeInterval(boolean isNano) { this.isNano = isNano; start(); diff --git a/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java index 29fbda464..919577933 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/PageUtil.java @@ -14,25 +14,25 @@ public class PageUtil { * 例如: * *
-	 * 页码:1,每页10 =》 0
-	 * 页码:2,每页10 =》 10
+	 * 页码:0,每页10 =》 0
+	 * 页码:1,每页10 =》 10
 	 * ……
 	 * 
* - * @param pageNo 页码(从1计数) + * @param pageNo 页码(从0计数) * @param pageSize 每页条目数 * @return 开始位置 */ public static int getStart(int pageNo, int pageSize) { - if (pageNo < 1) { - pageNo = 1; + if (pageNo < 0) { + pageNo = 0; } if (pageSize < 1) { pageSize = 0; } - return (pageNo - 1) * pageSize; + return pageNo * pageSize; } /** @@ -41,12 +41,12 @@ public class PageUtil { * 例如: * *
-	 * 页码:1,每页10 =》 [0, 10]
-	 * 页码:2,每页10 =》 [10, 20]
+	 * 页码:0,每页10 =》 [0, 10]
+	 * 页码:1,每页10 =》 [10, 20]
 	 * ……
 	 * 
* - * @param pageNo 页码(从1计数) + * @param pageNo 页码(从0计数) * @param pageSize 每页条目数 * @return 第一个数为开始位置,第二个数为结束位置 */ diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java index 55de37cf3..f910e06ff 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java @@ -18,6 +18,7 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; /** @@ -39,7 +40,7 @@ public class CollUtilTest { Dict v1 = Dict.create().set("id", 12).set("name", "张三").set("age", 23); Dict v2 = Dict.create().set("age", 13).set("id", 15).set("name", "李四"); - final String[] keys = v1.keySet().toArray(new String[v1.size()]); + final String[] keys = v1.keySet().toArray(new String[0]); ArrayList v1s = CollectionUtil.valuesOfKeys(v1, keys); Assert.assertTrue(v1s.contains(12)); Assert.assertTrue(v1s.contains(23)); @@ -345,6 +346,7 @@ public class CollUtilTest { @Test public void getTest() { + @SuppressWarnings("RedundantArrayCreation") HashSet set = CollUtil.newHashSet(true, new String[] { "A", "B", "C", "D" }); String str = CollUtil.get(set, 2); Assert.assertEquals("C", str); @@ -546,8 +548,8 @@ public class CollUtilTest { @Test public void sortPageAllTest() { - ArrayList list = CollUtil.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9); - List sortPageAll = CollUtil.sortPageAll(2, 5, Comparator.reverseOrder(), list); + List list = CollUtil.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9); + List sortPageAll = CollUtil.sortPageAll(1, 5, Comparator.reverseOrder(), list); Assert.assertEquals(CollUtil.newArrayList(4, 3, 2, 1), sortPageAll); } @@ -583,7 +585,7 @@ public class CollUtilTest { Map map = CollUtil.zip(keys, values); - Assert.assertEquals(4, map.size()); + Assert.assertEquals(4, Objects.requireNonNull(map).size()); Assert.assertEquals(1, map.get("a").intValue()); Assert.assertEquals(2, map.get("b").intValue()); diff --git a/hutool-db/src/main/java/cn/hutool/db/Page.java b/hutool-db/src/main/java/cn/hutool/db/Page.java index 32df9e155..59d45ec7f 100644 --- a/hutool-db/src/main/java/cn/hutool/db/Page.java +++ b/hutool-db/src/main/java/cn/hutool/db/Page.java @@ -49,7 +49,7 @@ public class Page implements Serializable { /** * 构造 * - * @param pageNumber 页码 + * @param pageNumber 页码,0表示第一页 * @param numPerPage 每页结果数 * @param order 排序对象 */ @@ -61,7 +61,7 @@ public class Page implements Serializable { // ---------------------------------------------------------- Getters and Setters start /** - * @return 页码 + * @return 页码,0表示第一页 */ public int getPageNumber() { return pageNumber; @@ -157,10 +157,14 @@ public class Page implements Serializable { /** * 开始位置和结束位置
- * 例如:
- * 页码:1,每页10 =》 [0, 10]
- * 页码:2,每页10 =》 [10, 20]
- * 。。。
+ * 例如: + * + *
+	 * 页码:0,每页10 =》 [0, 10]
+	 * 页码:1,每页10 =》 [10, 20]
+	 * 页码:2,每页10 =》 [21, 30]
+	 * 。。。
+	 * 
* * @return 第一个数为开始位置,第二个数为结束位置 */ diff --git a/hutool-db/src/main/java/cn/hutool/db/PageResult.java b/hutool-db/src/main/java/cn/hutool/db/PageResult.java index 0cacc7eba..1be7b2cff 100644 --- a/hutool-db/src/main/java/cn/hutool/db/PageResult.java +++ b/hutool-db/src/main/java/cn/hutool/db/PageResult.java @@ -16,7 +16,7 @@ public class PageResult extends ArrayList { public static final int DEFAULT_PAGE_SIZE = Page.DEFAULT_PAGE_SIZE; /** - * 页码 + * 页码,0表示第一页 */ private int page; /** @@ -44,7 +44,7 @@ public class PageResult extends ArrayList { /** * 构造 * - * @param page 页码 + * @param page 页码,0表示第一页 * @param pageSize 每页结果数 */ public PageResult(int page, int pageSize) { @@ -57,7 +57,7 @@ public class PageResult extends ArrayList { /** * 构造 * - * @param page 页码 + * @param page 页码,0表示第一页 * @param pageSize 每页结果数 * @param total 结果总数 */ @@ -72,14 +72,16 @@ public class PageResult extends ArrayList { //---------------------------------------------------------- Getters and Setters start /** - * @return 页码 + * 页码,0表示第一页 + * + * @return 页码,0表示第一页 */ public int getPage() { return page; } /** - * 设置页码 + * 设置页码,0表示第一页 * * @param page 页码 */ 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 d31ddac1d..816305b39 100644 --- a/hutool-db/src/test/java/cn/hutool/db/DbTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/DbTest.java @@ -28,6 +28,15 @@ public class DbTest { Assert.assertEquals("王五", find.get(0).get("name")); } + @Test + public void pageTest() throws SQLException { + // 测试数据库中一共4条数据,第0页有3条,第1页有1条 + List page0 = Db.use().page(Entity.create("user"), 0, 3); + Assert.assertEquals(3, page0.size()); + List page1 = Db.use().page(Entity.create("user"), 1, 3); + Assert.assertEquals(1, page1.size()); + } + @Test public void findLikeTest() throws SQLException { // 方式1 diff --git a/hutool-db/src/test/java/cn/hutool/db/FindBeanTest.java b/hutool-db/src/test/java/cn/hutool/db/FindBeanTest.java index 973bfef6b..7ced2f1af 100644 --- a/hutool-db/src/test/java/cn/hutool/db/FindBeanTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/FindBeanTest.java @@ -1,15 +1,12 @@ package cn.hutool.db; -import java.sql.SQLException; -import java.util.List; - +import cn.hutool.db.pojo.User; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import cn.hutool.db.Db; -import cn.hutool.db.Entity; -import cn.hutool.db.pojo.User; +import java.sql.SQLException; +import java.util.List; /** * Entity测试 diff --git a/pom.xml b/pom.xml index da69ba734..64d06dd3f 100644 --- a/pom.xml +++ b/pom.xml @@ -134,7 +134,7 @@ org.apache.maven.plugins maven-source-plugin - 3.1.0 + 3.2.1 oss