位置:首頁 > Java技術 > Spring > Spring JDBC框架

Spring JDBC框架

同時與數據庫使用普通的舊JDBC的工作,它變得繁瑣寫不必要的代碼來處理異常,打開和關閉數據庫連接等,但Spring的JDBC框架需要的所有低層次細節從打開連接,準備和執行SQL語句,過程異常,處理事務,最後關閉連接。

所以,你所要做的隻是定義連接參數,並指定要執行的SQL語句,並做必要的工作,在每次迭代時從數據庫中獲取數據。

Spring JDBC提供了一些方法和相應不同的類與數據庫進行交互。我要采取經典和最流行的做法,利用JdbcTemplateclass框架。這是管理的所有數據庫的通信和異常處理中心框架類。

JdbcTemplate 類

JdbcTemplate類執行SQL查詢,更新語句和存儲過程調用,在結果集和提取返回參數值進行迭代。它還捕捉JDBC的異常並將其轉換為通用的,信息更豐富,除了在org.springframework.dao包中定義的層次結構。

JdbcTemplate類的實例是一次配置的線程。所以,你可以配置一個JdbcTemplate的一個實例,然後安全地注入這種共享引用到多個DAO。

使用JdbcTemplate類時,通常的做法是配置一個DataSource在Spring配置文件,然後依賴關係注入該共享數據源豆到DAO類,JdbcTemplate或者是在setter數據源創建。

配置數據源

讓我們一起創造數據庫test數據庫表的 student 。假設使用MySQL數據庫,如果使用其他數據庫,那麼可以相應地改變你的DDL和SQL查詢。

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);

現在,我們需要提供一個數據源給JdbcTemplate類,因此它可以自行配置,以獲得數據庫訪問。您可以配置數據源的XML文件中有一段代碼,如下圖所示:

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

數據訪問對象 (DAO)

DAO表示這是通常用於數據庫交互的數據訪問對象。 DAO的存在是為了提供讀取和寫入數據到數據庫中,他們應該通過該應用程序的其餘部分將訪問它們的接口公開此功能的一種手段。

在Spring的數據訪問對象(DAO)的支持使得它很容易與如JDBCHibernate,JPA和JDO以一致的方式進行數據訪問技術。

執行SQL語句

讓我們來看看如何使用SQL和的JdbcTemplate對象數據庫中的表執行CRUD(創建,讀取,更新和刪除)操作。

查詢一個整數:

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

查詢長整數:

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

使用綁定變量的簡單查詢:

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

在查詢字符串:

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

查詢並返回一個對象:

String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(SQL, 
                  new Object[]{10}, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      return student;
   }
}

查詢並返回多個對象:

String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(SQL,
                         new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      return student;
   }
}

插入一行到表:

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

更新一行到表:

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

從表中刪除行:

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

執行DDL語句

您可以使用execute(...)方法的JdbcTemplate來執行任何SQL語句或DDL語句。下麵是一個示例使用CREATE語句創建一個表:

String SQL = "CREATE TABLE Student( " +
   "ID   INT NOT NULL AUTO_INCREMENT, " +
   "NAME VARCHAR(20) NOT NULL, " +
   "AGE  INT NOT NULL, " +
   "PRIMARY KEY (ID));"

jdbcTemplateObject.execute( SQL );

Spring JDBC框架的例子:

基於上述理念,讓我們檢查,這將有助於您了解在Spring JDBC框架的使用幾個重要的例子:

S.N. 例子& 描述
1 Spring JDBC 例子
這個例子將說明如何編寫一個簡單的一個基於JDBC的Spring應用程序。
2 SpringSQL存儲過程
了解如何在Spring中使用JDBC調用SQL存儲過程。