JdbcTemplate和NamedParameterJdbcTemplate的使用

1.Spring NamedParameterJdbcTemplate 详解 解决jdbcTemplate中 in 参数的问题

1.1 封装一个分页的工具类JdbcTemplatePage

PageVo

 1 package utils.sql;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 /**
 7  * Created by oracle on 2016/10/26.
 8  */
 9 public class PageVo<T> implements Serializable {
10     //分页查询结果
11     List<T> Result;
12     //页总数
13     Integer pageNum;
14     //一页记录数
15     Integer pageSize;
16     //总记录数
17     Integer totalCount;
18 
19 
20     public PageVo() {
21 
22     }
23 
24     public PageVo(Integer pageNum, Integer pageSize) {
25         this.pageNum = pageNum;
26         this.pageSize = pageSize;
27     }
28 
29     public Integer getTotalCount() {
30         return totalCount;
31     }
32 
33     public void setTotalCount(Integer totalCount) {
34         this.totalCount = totalCount;
35     }
36 
37     public List<T> getResult() {
38         return Result;
39     }
40 
41     public void setResult(List<T> result) {
42         Result = result;
43     }
44 
45     public Integer getPageNum() {
46         return pageNum;
47     }
48 
49     public void setPageNum(Integer pageNum) {
50         this.pageNum = pageNum;
51     }
52 
53     public Integer getPageSize() {
54         return pageSize;
55     }
56 
57     public void setPageSize(Integer pageSize) {
58         this.pageSize = pageSize;
59     }
60 }
View Code

JdbcTemplatePage

 1 package utils.sql;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 5 import org.springframework.jdbc.core.JdbcTemplate;
 6 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 7 import org.springframework.stereotype.Component;
 8 import utils.log.Log;
 9 import utils.log.Logs;
10 import java.util.List;
11 import java.util.Map;
12 
13 /**
14  * parent
15  *
16  * @date 2018/7/25
17  * 分页查询
18  */
19 @Component
20 public class JdbcTemplatePage {
21     private static final Log log = Logs.getLog(JdbcTemplatePage.class.getName());
22 
23     @Autowired
24     JdbcTemplate jdbcTemplate;
25 
26     /**
27      * @param sql
28      * @param elementType 返回需要封装的pageVo
29      * @param page
30      * @param pageSize
31      * @param args
32      * @return PageVo
33      */
34     public <T> PageVo<T> query(String sql, Class<T> elementType, Integer page, Integer pageSize, Map<String,Object> args) throws Exception {
35         NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());
36         sql = sql.toLowerCase();
37         log.info("query sql:"+sql);
38         SqlReCreateFactory sqlReCreateFactory = new SqlReCreateFactory<Object>(sql, page, pageSize, args).invoke();
39         sql = sqlReCreateFactory.getSql();
40         PageVo<T> pageVo = sqlReCreateFactory.getPageVo();
41         List<T> result = namedParameterJdbcTemplate.query(sql, args, new BeanPropertyRowMapper<>(elementType));
42         pageVo.setResult(result);
43         return pageVo;
44     }
45 
46     private class SqlReCreateFactory<T> {   //
47         private String sql;
48         private Integer page;
49         private Integer pageSize;
50         private Map<String,Object> args;
51         private PageVo<T> pageVo;
52 
53         public SqlReCreateFactory(String sql, Integer page, Integer pageSize, Map<String, Object> args) {
54             this.sql = sql;
55             this.page = page;
56             this.pageSize = pageSize;
57             this.args = args;
58         }
59 
60         public String getSql() {
61             return sql;
62         }
63 
64         public PageVo<T> getPageVo() {
65             return pageVo;
66         }
67 
68         public SqlReCreateFactory invoke() {
69             NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());
70             pageVo = new PageVo<>(0, pageSize);
71             String sqlCount = "select count(*) from (" + sql + ")  ";
72             Integer count = namedParameterJdbcTemplate.queryForObject(sqlCount, args, Integer.class); //查询页数
73             pageVo.setTotalCount(count);
74             int pageNum = 0;
75             if (count != null && count > 0) {
76                 if (count % pageSize == 0) {
77                     pageNum = count / pageSize;
78                 } else {
79                     pageNum = count / pageSize + 1;
80                 }
81                 pageVo.setPageNum(pageNum);
82             }
83             int pageMin = (page - 1) * pageSize;
84             int pageMax = pageMin + pageSize;
85             args.put("pagemin",pageMin);
86             args.put("pagemax",pageMax);
87             sql = "select p.* from (select t.* ,rownum rownumber from  (" +sql+ ") t) p where p.rownumber>:pagemin and p.rownumber<=:pagemax ";
88             return this;
89         }
90     }
91 }
View Code

1.2 使用JdbcTemplatePage进行分页

 1 package finance.service.service;
 2 
 3 import finance.api.dto.FinanceToAccountDto;
 4 import finance.api.vo.FundReconciliationQueryVo;
 5 import lombok.extern.slf4j.Slf4j;
 6 import org.apache.commons.collections.map.HashedMap;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.stereotype.Component;
 9 import utils.Lang;
10 import utils.sql.JdbcTemplatePage;
11 import utils.sql.PageVo;
12 
13 import java.util.ArrayList;
14 import java.util.HashMap;
15 import java.util.List;
16 import java.util.Map;
17 
18 /**
19  * @date 2018/5/7
20  */
21 @Component
22 @Slf4j
23 public class FundReconciliationService {
24 
25     @Autowired
26     private JdbcTemplatePage jdbcTemplatePage;
27 
28     /**
29      * 查询
30      *
31      * @param fundReconciliationQueryVo
32      * @param size
33      * @param number
34      * @return
35      */
36     public PageVo<FinanceToAccountDto> findfinancialInfo(FundReconciliationQueryVo fundReconciliationQueryVo, int size, int number) {
37         PageVo<FinanceToAccountDto> pageVo = null;
38         Map<String, Object> sqlListMap = financialInfoSql(fundReconciliationQueryVo);
39         try {
40             pageVo = jdbcTemplatePage.query(String.valueOf(sqlListMap.get("sql")), FinanceToAccountDto.class, number, size, (Map<String, Object>) sqlListMap.get("params"));
41         } catch (Exception e) {
42             e.printStackTrace();
43         }
44         return pageVo;
45     }
46 
47 
48     /**
49      * sql
50      *
51      * @param fundReconciliationQueryVo
52      * @return
53      */
54     public Map<String, Object> financialInfoSql(FundReconciliationQueryVo fundReconciliationQueryVo) {
55         StringBuffer sql = new StringBuffer();
56         sql.append(" select rownum as indexNum,c.capital_number as capitalNumber, ");
57         sql.append(" c.customer_reference_name as customerReferenceName, ");
58         sql.append(" c.source_note_code as sourceNoteCode, ");
59         sql.append(" c.amount as amount, ");
60         sql.append(" c.post_date_time as postDateTime, ");
61         sql.append(" c.direction as direction, ");
62         sql.append(" fba.account_status as accountStatus ");
63         sql.append(" from CAPITAL c, fn_bills_account fba ");
64         sql.append(" where c.capital_number = fba.capital_number(+) ");
65 
66         Map<String, Object> params = new HashMap<String, Object>();
67         List<Object> list = new ArrayList<Object>();
68         String[] accountStatusArry = fundReconciliationQueryVo.getAccountStatus().split(",");
69         for (String accountStatus : accountStatusArry) {
70             list.add(accountStatus);
71         }
72         if (!Lang.isEmpty(fundReconciliationQueryVo.getAccountStatus())) {
73             if (fundReconciliationQueryVo.getAccountStatus().indexOf("0") >= 0) {
74                 sql.append(" and (fba.account_status is null or fba.account_status in(:accountstatus)) ");
75             } else {
76                 sql.append(" and fba.account_status in(:accountstatus) ");
77             }
78             params.put("accountstatus", list);
79         }
80         if (!Lang.isEmpty(fundReconciliationQueryVo.getPostDateStartTime())) {
81             sql.append(" and c.post_date_time >= to_date(:postdatestarttime, 'yyyy-mm-dd hh24:mi:ss') ");
82             params.put("postdatestarttime", fundReconciliationQueryVo.getPostDateStartTime());
83         }
84         if (!Lang.isEmpty(fundReconciliationQueryVo.getPostDateEndTime())) {
85             sql.append(" and c.post_date_time <= to_date(:postdateendtime, 'yyyy-mm-dd hh24:mi:ss') ");
86             params.put("postdateendtime", fundReconciliationQueryVo.getPostDateEndTime());
87         }
88         if (!Lang.isEmpty(fundReconciliationQueryVo.getSourceNoteCode())) {
89             sql.append(" and c.source_note_code = :sourcenotecode ");
90             params.put("sourcenotecode", fundReconciliationQueryVo.getSourceNoteCode());
91         }
92         log.info("财务到账信息列表查询sql===》:{}", sql.toString());
93         Map<String, Object> map = new HashedMap();
94         map.put("sql", sql.toString());
95         map.put("params", params);
96         return map;
97     }
98 }
View Code

猜你喜欢

转载自www.cnblogs.com/jcjssl/p/9371140.html