Spring 中的jdbc模板介紹

Spring JDBC簡介

  Spring所提供的JDBC抽象框架由四個不同的包組成:

  · 核心包包含JdbcTemplate。這個類是一個基礎類之一-由Spring框架的JDBC支持提供並使用。

  · 數據源包是實現單元測試數據庫存取代碼的重要的一部分。它的DriverManagerDataSource能夠以一種類似於你已經習慣於JDBC中的用法:只要創建一個新的DriverManagerDataSource並且調用setter方法來設置DriverClassName,Url,Username和Password。

  · 對象包中包含類,用於描述RDBMS查詢、更改和存儲過程爲線程安全的、可重用的對象。

  · 支持包-你可以從這裏找到SQLException翻譯功能和一些工具類。

  1) 模板設計模式

  Spring JDBC實現模板設計模式,這意味着,代碼中的重複的複雜的任務部分是在模板類中實現的。這種方式簡化了JDBC的使用,因爲由它來處理資源的創建和釋放。這有助於避免普通錯誤,例如忘記關閉連接等。它執行核心JDBC工作流任務,如語句創建和執行,而讓應用程序代碼來提供SQL並且提取結果。

  2) Spring JDBC異常處理

  Spring框架特別強調在傳統型JDBC編程中所面臨的與下列方案有關的問題:

  · Spring提供一個抽象異常層,把冗長並且易出錯誤的異常處理從應用程序代碼移到由框架來實現。框架負責所有的異常處理;應用程序代碼則能夠專注於使用適當的SQL提取結果。

  · Spring提供了一個重要的異常類層次,以便於你的應用程序代碼中可以使用恰當的SQLException子類。

  藉助於一個抽象異常層,我們成功地實現了數據庫獨立性而不必改變異常處理。例如,如果你把你的數據庫從PostgreSQL改變爲Oracle,那麼你不必把異常處理從OracleDataException改變到PostgresDataException。Spring能夠捕獲應用程序服務器特定的異常並拋出一個Spring數據異常。

  當處理異常時,Spring檢查來自一個數據庫連接的元數據可用性以決定數據庫產品。它使用這種知識來把SQLException映射到其自己異常層次中的具體的異常上。因此,我們不需要擔心專門性的SQL狀態或錯誤代碼問題;Spring的數據存取異常不是JDBC特定的,因此你的DAO不必綁定到JDBC(由於其可能拋出的異常)。

  四. Spring JDBC示例

  在下面兩個列表中,我們將使用前面用傳統型JDBC實現的業務邏輯爲例並且展示使用Spring JDBC版本是多麼容易。首先,我們從一個簡單的接口開始。

 

接口:

import java.util.List;

public interface TasksDAO {
 
 
 public List getTasksNames();

 
}

接口實現類:

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
/**
 * wangzy spring jdbcTemplate
 * @author Administrator
 *
 */

public class TasksJdbcDAO extends JdbcDaoSupport implements TasksDAO
{

 public List getTasksNames() {
  
  JdbcTemplate jt = getJdbcTemplate();//獲取sping 的模板
  
  
  return jt.query("select USERNAME,PASSWORD from userinfo",new TasksRowMapper());
 }
 // 繼承了sping,封裝好的接口RowMapper
 class TasksRowMapper implements RowMapper {
   public Object mapRow(ResultSet rs,int index)throws SQLException {
   return rs.getString(1);}//獲取列數
   }
 public static void main(String[] args)throws Exception {
  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//獲取sping配置文件地址
  DataSource ds =(DataSource) ctx.getBean("dataSourceDBDirect");//獲取數據源
  TasksJdbcDAO taskDao = new TasksJdbcDAO();

  taskDao.setDataSource(ds);
    Iterator tskIter = taskDao.getTasksNames().iterator(); //提取數據,循環遍歷
  while (tskIter.hasNext()) {
    System.out.println(tskIter.next().toString());
  }

 }
 
}


appliactiong:(src下)

<bean id="dataSourceDBDirect" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
 <property name="url" value="jdbc:mysql://localhost:3306/userinfo"></property>
 <property name="username" value="root"></property>
 <property name="password" value="root"></property>

 </bean>
 數據庫:mysql

 

 

 

 

發佈了18 篇原創文章 · 獲贊 3 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章