|
1 | 1 | package com.codingapi.springboot.fast.jdbc;
|
2 | 2 |
|
3 | 3 | import org.apache.commons.text.CaseUtils;
|
| 4 | +import org.springframework.data.domain.Page; |
| 5 | +import org.springframework.data.domain.PageImpl; |
| 6 | +import org.springframework.data.domain.PageRequest; |
4 | 7 | import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
5 | 8 | import org.springframework.jdbc.core.RowMapper;
|
6 | 9 |
|
@@ -28,18 +31,41 @@ public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException
|
28 | 31 | Map<String, Object> map = new HashMap<>(columnCount);
|
29 | 32 | for (int i = 1; i <= columnCount; i++) {
|
30 | 33 | String columnName = metaData.getColumnLabel(i);
|
31 |
| - map.put(CaseUtils.toCamelCase(columnName,false), rs.getObject(i)); |
| 34 | + map.put(CaseUtils.toCamelCase(columnName, false), rs.getObject(i)); |
32 | 35 | }
|
33 | 36 | return map;
|
34 | 37 | }
|
35 | 38 | }
|
36 | 39 |
|
37 |
| - public List<Map<String,Object>> queryForList(String sql, Object... params) { |
| 40 | + public List<Map<String, Object>> queryForList(String sql, Object... params) { |
38 | 41 | return jdbcTemplate.query(sql, params, new CamelCaseRowMapper());
|
39 | 42 | }
|
40 | 43 |
|
41 | 44 | public <T> List<T> queryForList(String sql, Class<T> clazz, Object... params) {
|
42 | 45 | return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz));
|
43 | 46 | }
|
44 | 47 |
|
| 48 | + public <T> Page<T> queryForPage(String sql, String countSql, Class<T> clazz, PageRequest pageRequest, Object... params) { |
| 49 | + List<T> list = jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz)); |
| 50 | + long count = this.countQuery(countSql, params); |
| 51 | + return new PageImpl<>(list, pageRequest, count); |
| 52 | + } |
| 53 | + |
| 54 | + public Page<Map<String, Object>> queryForPage(String sql, String countSql, PageRequest pageRequest, Object... params) { |
| 55 | + List<Map<String, Object>> list = jdbcTemplate.query(sql, params, new CamelCaseRowMapper()); |
| 56 | + |
| 57 | + long count = this.countQuery(countSql, params); |
| 58 | + return new PageImpl<>(list, pageRequest, count); |
| 59 | + } |
| 60 | + |
| 61 | + |
| 62 | + private long countQuery(String sql, Object... params) { |
| 63 | + int paramsLength = params.length; |
| 64 | + int countSqlParamsLength = sql.split("\\?").length - 1; |
| 65 | + Object[] newParams = new Object[countSqlParamsLength]; |
| 66 | + if (paramsLength > countSqlParamsLength) { |
| 67 | + System.arraycopy(params, 0, newParams, 0, countSqlParamsLength); |
| 68 | + } |
| 69 | + return jdbcTemplate.queryForObject(sql, newParams, Long.class); |
| 70 | + } |
45 | 71 | }
|
0 commit comments