|
17 | 17 | class DynamicSQLBuilder { |
18 | 18 |
|
19 | 19 | private final PageRequest request; |
20 | | - private final Class<?> clazz; |
21 | 20 |
|
22 | 21 | private final List<Object> params = new ArrayList<>(); |
23 | 22 | private int paramIndex = 1; |
| 23 | + private final StringBuilder hql; |
| 24 | + private final StringBuilder countHql ; |
24 | 25 |
|
25 | 26 | public DynamicSQLBuilder(PageRequest request, Class<?> clazz) { |
26 | 27 | this.request = request; |
27 | | - this.clazz = clazz; |
| 28 | + this.hql = new StringBuilder("FROM " + clazz.getSimpleName() + " WHERE "); |
| 29 | + this.countHql = new StringBuilder("SELECT COUNT(1) FROM " + clazz.getSimpleName() + " WHERE "); |
| 30 | + this.build(); |
28 | 31 | } |
29 | 32 |
|
| 33 | + public String getHQL(){ |
| 34 | + return this.hql.toString(); |
| 35 | + } |
| 36 | + |
| 37 | + public String getCountHQL(){ |
| 38 | + return this.countHql.toString(); |
| 39 | + } |
30 | 40 |
|
31 | | - public String getHQL() { |
32 | | - StringBuilder hql = new StringBuilder("FROM " + clazz.getSimpleName() + " WHERE "); |
| 41 | + private void build() { |
| 42 | + StringBuilder querySQL = new StringBuilder(); |
| 43 | + StringBuilder orderSQL = new StringBuilder(); |
33 | 44 | RequestFilter requestFilter = request.getRequestFilter(); |
34 | 45 | if (requestFilter.hasFilter()) { |
35 | 46 | List<Filter> filters = requestFilter.getFilters(); |
36 | 47 | for (int i = 0; i < filters.size(); i++) { |
37 | 48 | Filter filter = filters.get(i); |
38 | | - this.buildSQL(filter, hql); |
| 49 | + this.buildSQL(filter, querySQL); |
39 | 50 | if (i != filters.size() - 1) { |
40 | | - hql.append(" AND "); |
| 51 | + querySQL.append(" AND "); |
41 | 52 | } |
42 | 53 | } |
43 | 54 | } |
44 | 55 |
|
45 | 56 | Sort sort = request.getSort(); |
46 | 57 | if (sort.isSorted()) { |
47 | | - hql.append(" ORDER BY "); |
| 58 | + orderSQL.append(" ORDER BY "); |
48 | 59 | List<Sort.Order> orders = sort.toList(); |
49 | 60 | for (int i = 0; i < orders.size(); i++) { |
50 | 61 | Sort.Order order = orders.get(i); |
51 | | - hql.append(order.getProperty()).append(" ").append(order.getDirection().name()); |
| 62 | + orderSQL.append(order.getProperty()).append(" ").append(order.getDirection().name()); |
52 | 63 | if (i != orders.size() - 1) { |
53 | | - hql.append(","); |
| 64 | + orderSQL.append(","); |
54 | 65 | } |
55 | 66 | } |
56 | 67 | } |
57 | 68 |
|
| 69 | + this.hql.append(querySQL); |
| 70 | + this.hql.append(orderSQL); |
| 71 | + this.countHql.append(querySQL); |
| 72 | + |
58 | 73 | log.debug("hql:{}", hql); |
59 | 74 | log.debug("params:{}", params); |
60 | | - return hql.toString(); |
| 75 | + |
61 | 76 | } |
62 | 77 |
|
63 | 78 |
|
@@ -139,7 +154,6 @@ private void buildSQL(Filter filter, StringBuilder hql) { |
139 | 154 | params.add(Arrays.asList(filter.getValue())); |
140 | 155 | paramIndex++; |
141 | 156 | } |
142 | | - |
143 | 157 | if (filter.isGreaterThan()) { |
144 | 158 | hql.append(filter.getKey()).append(" > ?").append(paramIndex); |
145 | 159 | params.add(filter.getValue()[0]); |
@@ -172,4 +186,5 @@ private void buildSQL(Filter filter, StringBuilder hql) { |
172 | 186 | public Object[] getParams() { |
173 | 187 | return params.toArray(); |
174 | 188 | } |
| 189 | + |
175 | 190 | } |
0 commit comments