fix PageUtil bug

This commit is contained in:
Looly 2020-03-13 16:18:11 +08:00
parent 98cbc875dc
commit a508f2d5aa
11 changed files with 128 additions and 33 deletions

View File

@ -8,6 +8,7 @@
### 新特性
### Bug修复
* 【core 】 修复PageUtil第一页语义不明确的问题issue#782@Github
-------------------------------------------------------------------------------------------------------------
## 5.2.2

View File

@ -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 分页后的段落内容

View File

@ -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);
}
/**
* 生日转为年龄计算法定年龄
*

View File

@ -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();

View File

@ -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 第一个数为开始位置第二个数为结束位置
*/

View File

@ -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());

View File

@ -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 第一个数为开始位置第二个数为结束位置
*/

View File

@ -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 页码
*/

View File

@ -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

View File

@ -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测试

View File

@ -134,7 +134,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.1.0</version>
<version>3.2.1</version>
<executions>
<execution>
<id>oss</id>