javascript
spring: 使用Spring提供的JDBC模板(使用profiles选择数据源/使用基于JDBC驱动的数据源)...
Spring提供的JDBC框架負責管理資源和異常處理,從而可以簡化開發者的JDBC代碼。開發者只需要編寫寫入和讀取數據庫相關的代碼即可。
正如在之前的小節中論述過的,Spring將數據庫訪問過程中的模板樣式代碼封裝到各個模板類中了,對于JDBC,Spring提供了下列三個模板類:
- JdbcTemplate——最基本的JDBC模板,這個類提供了簡單的接口,通過JDBC和索引參數訪問數據庫;
- NameParameterJdbcTemplate——這個JDBC模板類是的開發者可以執行綁定了指定參數名稱的SQL,而不是索引參數;
- SimpleJdbcTemplate——這個版本的JDBC模板利用了Java 5的一些特性,例如自動裝箱/拆箱、接口和變參列表等,用于簡化JDBC模板的使用。
從Spring 3.1開始已經將SimpleJdbcTemplate廢棄,它所擁有的Java 5那些特性被添加到原來的JdbcTemplate中了,因此你可以直接使用JdbcTemplate;當你希望在查詢中使用命名參數時,則可以選擇使用NamedParameterJdbcTemplate。
INSERTING DATA USING JDBCTEMPLATE
要使用JdbcTemplate對象,需要為之傳遞DataSource對象。如果使用Java Config配置JdbcTemplatebean,則對應代碼如下:
@Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) {return new JdbcTemplate(dataSource); }
這里通過構造函數將DataSource對象注入,而dataSourcebean則來自DataSourceConfiguration文件中定義的javax.sql.DataSource實例。
然后就可以在自己的repository實現中注入jdbcTemplatebean,例如,假設Spitter的repository使用jdbcTemplatebean,代碼可列舉如下:
package org.test.spittr.dao;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcOperations; import org.springframework.stereotype.Repository; import org.test.spittr.data.Spitter;@Repository public class JdbcSpitterRepository implements SpitterRepository {@Autowiredprivate JdbcOperations jdbcOperations;..... }
這里JdbcSpitterRepository被@Repository注解修飾,component-scanning掃描機制起作用時會自動創建對應的bean。按照“面向接口編程”的原則,我們定義JdbcOperations接口對應的實例,而JdbcTemplate實現了這個接口,從而使得JdbcSpitterRepository與JdbcTemplate解耦合。
使用JdbcTemplate實現的addSpitter()方法非常簡單,代碼如下:
public void addSpitter(Spitter spitter) {jdbcOperations.update(SQL_INSERT_SPITTER,spitter.getUsername(),spitter.getPassword(),spitter.getFirstName(),spitter.getLastName()); }
可以看出,這個版本的addSpitter十分簡單,不強制開發者寫任何管理資源和處理異常的代碼,只有插入語句和對應的參數。
當調用update()方法時,JdbcTemplate獲取一個連接、創建一個statement,并執行插入語句。
JdbcTemplate內部捕獲了可能拋出的SQLException異常,然后轉為更具體的數據庫訪問異常,并重新拋出。由于Spring的數據庫訪問異常都是運行時異常,開發者可以自己決定是否捕獲這些異常。
READING DATA WITH JDBCTEMPLATE
使用JdbcTemplate工具從數據庫中讀取數據也非常簡單,下列代碼展示了改造過后的findOne()函數:調用JdbctTemplate的queryForObject函數,用于通過ID查詢Spitter對象。
public Spitter findOne(long id) {return jdbcOperations.queryForObject(SQL_SELECT_SPITTER,new SpitterRowMapper(),id); }private static final class SpitterRowMapper implements RowMapper<Spitter> {public Spitter mapRow(ResultSet resultSet, int i) throws SQLException {return new Spitter(resultSet.getLong("id"),resultSet.getString("firstName"),resultSet.getString("lastName"),resultSet.getString("username"),resultSet.getString("password"));} }
findOne()函數使用JdbcTemplate的queryForObject()方法從數據庫中查詢Spitter記錄。queryForObject()方法包括三個參數:
- SQL字符串,用于從數據庫中查詢數據;
- RowMapper對象,用于從結果集ResultSet中提取數據并構造Spitter對象;
- 變量列表,用于指定查詢參數(這里是通過id查詢)。
這里需要注意SpitterRowMapper類,它實現了RowMapper接口,對于查詢結果,JdbcTemplate調用mapRow()方法——一個ResultSet參數和一個row number參數。mapRow()方法的主要作用是:從結果集中取出對應屬性的值,并構造一個Spitter對象。
和addSpitter()方法相同,findOne()方法也沒有那些JDBC模板樣式代碼,只有純粹的用于查詢Spitter數據的代碼。
?
https://yq.aliyun.com/articles/54079
轉載于:https://www.cnblogs.com/achengmu/p/8301529.html
總結
以上是生活随笔為你收集整理的spring: 使用Spring提供的JDBC模板(使用profiles选择数据源/使用基于JDBC驱动的数据源)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决ajax获取不到按钮的id
- 下一篇: 64位CentOs7源码安装mysql-