public interface UserInfoDBService extends QueryRepository {
@Query(value="select id,name,age from `userinfo` where 1",countField="id")
Page<Map<String, Object>> findAll(Pageable pageable);
@Query("select id,name,age from `userinfo` #{#where}")
@Condition(l="age",o=Operator.GT,r="?1")
@Condition(c=COperator.AND,l="id",o=Operator.LT,r="?2")
Page<UserInfo> find(Integer age,Integer id,Pageable pageable);
@Query(value = "select id,name,age from `userinfo` #{#where}",
countQuery = "select count(id) from `userinfo` #{#where}")
@Condition(l = "age", o = Operator.GT, r = "?1")
@Condition(c=COperator.AND,l="id",o=Operator.LT,r="?2")
Page<UserInfo> findSome(Integer age,Integer id,Pageable pageable);
}
Integer age = 10;
Integer id = 50;
int p = 1;
int size = 3;
Pageable pageable = new PageableImpl(p, size);
Page<UserInfo> page = userInfoDBService.findSome(10, 50,pageable);
List<UserInfo> userInfos = page.getContent();
Slice slice = page.getNextPageable();
int number = page.getNumber();
她转换成JSON后的结构如下:
{
"content":[
{
"name":"查尔斯·巴贝奇","id":2,"year":1792
},
{
"name":"约翰·冯·诺依曼","id":3,"year":1903
},
{
"name":"阿兰·麦席森·图灵","id":1,"year":1912
},
{
"name":"约翰·麦卡锡","id":4,"year":1927
},
{
"name":"丹尼斯·里奇","id":5,"year":1941
},
{
"name":"蒂姆·伯纳斯·李","id":6,"year":1955
}
],
"first": true,
"hasContent": true,
"hasNext": true,
"hasPrevious": false,
"last": false,
"nextPageable": {
"number": 1,
"size": 15
},
"number": 1,
"numberOfElements": 6,
"previousPageable": {
"number": 0,
"size": 15
},
"size": 15,
"totalElements": 188,
"totalPages": 13
}
如果在分页函数上标识@NotCount,表示在分页中不统计总行数.
那么分页对象中的totalElements的值为-1L,totalPages为-1.其他属性都有效且真实.
如果明确指定不统计行数,那么设置countField和nativeQuery就会变得无意义.
通常分页的区间控制默认放在SQL语句的末尾.
在符合SQL语法的前提下,通过#{#limit}可以把分页区间放在SQL里的任何地方.