mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
fix PageUtil bug
This commit is contained in:
parent
98cbc875dc
commit
a508f2d5aa
@ -8,6 +8,7 @@
|
||||
### 新特性
|
||||
|
||||
### Bug修复
|
||||
* 【core 】 修复PageUtil第一页语义不明确的问题(issue#782@Github)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
## 5.2.2
|
||||
|
@ -2091,7 +2091,7 @@ public class CollUtil {
|
||||
* 采用{@link BoundedPriorityQueue}实现分页取局部
|
||||
*
|
||||
* @param <T> 集合元素类型
|
||||
* @param pageNo 页码,从1开始计数,0和1效果相同
|
||||
* @param pageNo 页码,从0开始计数,0表示第一页
|
||||
* @param pageSize 每页的条目数
|
||||
* @param comparator 比较器
|
||||
* @param colls 集合数组
|
||||
@ -2114,7 +2114,7 @@ public class CollUtil {
|
||||
* 对指定List分页取值
|
||||
*
|
||||
* @param <T> 集合元素类型
|
||||
* @param pageNo 页码,从1开始计数,0和1效果相同
|
||||
* @param pageNo 页码,从0开始计数,0表示第一页
|
||||
* @param pageSize 每页的条目数
|
||||
* @param list 列表
|
||||
* @return 分页后的段落内容
|
||||
|
@ -1753,6 +1753,79 @@ public class DateUtil {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计时器<br>
|
||||
* 计算某个过程花费的时间,精确到毫秒
|
||||
*
|
||||
* @param isNano 是否使用纳秒计数,false则使用毫秒
|
||||
* @return Timer
|
||||
* @since 5.2.3
|
||||
*/
|
||||
public static TimeInterval timer(boolean isNano) {
|
||||
return new TimeInterval(isNano);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建秒表{@link StopWatch},用于对代码块的执行时间计数
|
||||
* <p>
|
||||
* 使用方法如下:
|
||||
*
|
||||
* <pre>
|
||||
* StopWatch stopWatch = DateUtil.createStopWatch();
|
||||
*
|
||||
* // 任务1
|
||||
* stopWatch.start("任务一");
|
||||
* Thread.sleep(1000);
|
||||
* stopWatch.stop();
|
||||
*
|
||||
* // 任务2
|
||||
* stopWatch.start("任务一");
|
||||
* Thread.sleep(2000);
|
||||
* stopWatch.stop();
|
||||
*
|
||||
* // 打印出耗时
|
||||
* Console.log(stopWatch.prettyPrint());
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @return {@link StopWatch}
|
||||
* @since 5.2.3
|
||||
*/
|
||||
public static StopWatch createStopWatch() {
|
||||
return new StopWatch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建秒表{@link StopWatch},用于对代码块的执行时间计数
|
||||
* <p>
|
||||
* 使用方法如下:
|
||||
*
|
||||
* <pre>
|
||||
* StopWatch stopWatch = DateUtil.createStopWatch("任务名称");
|
||||
*
|
||||
* // 任务1
|
||||
* stopWatch.start("任务一");
|
||||
* Thread.sleep(1000);
|
||||
* stopWatch.stop();
|
||||
*
|
||||
* // 任务2
|
||||
* stopWatch.start("任务一");
|
||||
* Thread.sleep(2000);
|
||||
* stopWatch.stop();
|
||||
*
|
||||
* // 打印出耗时
|
||||
* Console.log(stopWatch.prettyPrint());
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @param id 用于标识秒表的唯一ID
|
||||
* @return {@link StopWatch}
|
||||
* @since 5.2.3
|
||||
*/
|
||||
public static StopWatch createStopWatch(String id) {
|
||||
return new StopWatch(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生日转为年龄,计算法定年龄
|
||||
*
|
||||
|
@ -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();
|
||||
|
@ -14,25 +14,25 @@ public class PageUtil {
|
||||
* 例如:
|
||||
*
|
||||
* <pre>
|
||||
* 页码:1,每页10 =》 0
|
||||
* 页码:2,每页10 =》 10
|
||||
* 页码:0,每页10 =》 0
|
||||
* 页码:1,每页10 =》 10
|
||||
* ……
|
||||
* </pre>
|
||||
*
|
||||
* @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 {
|
||||
* 例如:
|
||||
*
|
||||
* <pre>
|
||||
* 页码:1,每页10 =》 [0, 10]
|
||||
* 页码:2,每页10 =》 [10, 20]
|
||||
* 页码:0,每页10 =》 [0, 10]
|
||||
* 页码:1,每页10 =》 [10, 20]
|
||||
* ……
|
||||
* </pre>
|
||||
*
|
||||
* @param pageNo 页码(从1计数)
|
||||
* @param pageNo 页码(从0计数)
|
||||
* @param pageSize 每页条目数
|
||||
* @return 第一个数为开始位置,第二个数为结束位置
|
||||
*/
|
||||
|
@ -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<Object> 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<String> 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<Integer> list = CollUtil.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9);
|
||||
List<Integer> sortPageAll = CollUtil.sortPageAll(2, 5, Comparator.reverseOrder(), list);
|
||||
List<Integer> list = CollUtil.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9);
|
||||
List<Integer> 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<String, Integer> 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());
|
||||
|
@ -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 {
|
||||
|
||||
/**
|
||||
* 开始位置和结束位置<br>
|
||||
* 例如:<br>
|
||||
* 页码:1,每页10 =》 [0, 10]<br>
|
||||
* 页码:2,每页10 =》 [10, 20]<br>
|
||||
* 。。。<br>
|
||||
* 例如:
|
||||
*
|
||||
* <pre>
|
||||
* 页码:0,每页10 =》 [0, 10]
|
||||
* 页码:1,每页10 =》 [10, 20]
|
||||
* 页码:2,每页10 =》 [21, 30]
|
||||
* 。。。
|
||||
* </pre>
|
||||
*
|
||||
* @return 第一个数为开始位置,第二个数为结束位置
|
||||
*/
|
||||
|
@ -16,7 +16,7 @@ public class PageResult<T> extends ArrayList<T> {
|
||||
public static final int DEFAULT_PAGE_SIZE = Page.DEFAULT_PAGE_SIZE;
|
||||
|
||||
/**
|
||||
* 页码
|
||||
* 页码,0表示第一页
|
||||
*/
|
||||
private int page;
|
||||
/**
|
||||
@ -44,7 +44,7 @@ public class PageResult<T> extends ArrayList<T> {
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param page 页码
|
||||
* @param page 页码,0表示第一页
|
||||
* @param pageSize 每页结果数
|
||||
*/
|
||||
public PageResult(int page, int pageSize) {
|
||||
@ -57,7 +57,7 @@ public class PageResult<T> extends ArrayList<T> {
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param page 页码
|
||||
* @param page 页码,0表示第一页
|
||||
* @param pageSize 每页结果数
|
||||
* @param total 结果总数
|
||||
*/
|
||||
@ -72,14 +72,16 @@ public class PageResult<T> extends ArrayList<T> {
|
||||
//---------------------------------------------------------- Getters and Setters start
|
||||
|
||||
/**
|
||||
* @return 页码
|
||||
* 页码,0表示第一页
|
||||
*
|
||||
* @return 页码,0表示第一页
|
||||
*/
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置页码
|
||||
* 设置页码,0表示第一页
|
||||
*
|
||||
* @param page 页码
|
||||
*/
|
||||
|
@ -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<Entity> page0 = Db.use().page(Entity.create("user"), 0, 3);
|
||||
Assert.assertEquals(3, page0.size());
|
||||
List<Entity> page1 = Db.use().page(Entity.create("user"), 1, 3);
|
||||
Assert.assertEquals(1, page1.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findLikeTest() throws SQLException {
|
||||
// 方式1
|
||||
|
@ -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测试
|
||||
|
Loading…
Reference in New Issue
Block a user