前言
最近的項目中由於只進行查詢,所以使用了jdbcTemplate來直接操作sql進行持久層的操作,初次接觸jdbcTemplate,從最開始的什么都不知道到現在基本方法都大致知道什么意思,特此記錄一下
正文
jdbcTemplate方法常用的大約有這個幾個
1. queryForInt()/queryForLong() 2. queryForObject() 3. queryForList() 4. queryForMap() 5. query()
1. queryForInt()/queryForLong()
使用queryForInt()主要是為了獲取數據庫中記錄總數,獲取指定條件的記錄數等,不需要對應列名,只需要返回一個數據即可.queryForLong()是同理的.
如果你想查詢到結果並命名的話,你可以使用queryForMap(),查詢到的值更改列名為別名,然后使用map.get("別名")來獲取.
2. queryForObject()
其實本質上queryForObject()和queryForInt()是一直的,只不過可以返回一個非int的值,比如你查詢指定id的對象的某一個屬性,可以使用Object進行接收,而不能使用int來接收.
(6-25更新)舉個例子:
String sql = "SELECT name FROM user WHERE id = ?"; return jdbcTemplate.queryForObject(sql,String.class,id); //需要注意的是:第一個參數:SQL語句,第二個參數:你查詢的結果的返回值類型,第三個參數是:你傳入的參數
3. queryForList()
在我們需要得到一個數據集合的時候,我們通常使用queryForList()進行。返回的結果是一個List<Map>結構的集合。其中一個Map代表了一行數據,使用列名作為key,使用值作為value。
並且queryForList()會默認自動封裝。不需要手動進行數據封裝。
4. queryForMap()
queryForMap()是查詢一條數據的時候使用的封裝。將列名作為key,值作為value。封裝成一個map返回結果。
需要特別注意的是:因為queryForMap()是要求必須要有結果集的,如果查詢出的結果是null,則會報錯!如果不確定是否有結果集,請使用query()進行查詢,然后獲取數據。(7-4更新)
5. query()
query()進行查詢的時候,必須自行對結果集進行取出並封裝。
優點是:數據更加靈活,如果你想在結果集中加上一個固定值作為標記,甚至自己自定義key的值,對value的值進行計算等等,都可以,非常靈活。
缺點是:你需要手動進行封裝數據。
代碼如下:
StringBuilder sql = new StringBuilder(); sql.append("SELECT *FROM USER"); List<Object> paramList = new ArrayList<>(); if (!StringUtils.isEmpty(ID)) { sql.append(" AND TI.ID = ? "); paramList.add(ID); } return this.jdbcTemplate.query(sql.toString(), (rs, rowNum) -> { Map<String, Object> dataMap = new HashMap<>(); dataMap.put("L1", rs.getString("L1")); dataMap.put("L2", rs.getInt("L2") + 100); //對查詢出來的結果進行計算,修改等等操作 dataMap.put("L3", 1); //我添加了一個固定列到結果集中 return dataMap; }, paramList.toArray());
后記
總的來說,jdbcTemplate對於查詢來說,如果你對sql比較精通,使用起來非常方便,靈活。