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里的任何地方.