1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.batch.item.database.support;
18
19 import org.springframework.batch.item.database.PagingQueryProvider;
20 import org.springframework.util.StringUtils;
21
22
23
24
25
26
27
28
29 public class MySqlPagingQueryProvider extends AbstractSqlPagingQueryProvider {
30
31 @Override
32 public String generateFirstPageQuery(int pageSize) {
33 return SqlPagingQueryUtils.generateLimitSqlQuery(this, false, buildLimitClause(pageSize));
34 }
35
36 @Override
37 public String generateRemainingPagesQuery(int pageSize) {
38 if(StringUtils.hasText(getGroupClause())) {
39 return SqlPagingQueryUtils.generateLimitGroupedSqlQuery(this, true, buildLimitClause(pageSize));
40 }
41 else {
42 return SqlPagingQueryUtils.generateLimitSqlQuery(this, true, buildLimitClause(pageSize));
43 }
44 }
45
46 private String buildLimitClause(int pageSize) {
47 return new StringBuilder().append("LIMIT ").append(pageSize).toString();
48 }
49
50 @Override
51 public String generateJumpToItemQuery(int itemIndex, int pageSize) {
52 int page = itemIndex / pageSize;
53 int offset = (page * pageSize) - 1;
54 offset = offset<0 ? 0 : offset;
55
56 String limitClause = new StringBuilder().append("LIMIT ").append(offset).append(", 1").toString();
57 return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
58 }
59
60 }