一,JDBC在Spring中的架構
Spring JDBC 架構負責所有的低層細節,從開始打開連接配接,準備和執行 SQL 語句,處理異常,處理事務,到最後關閉連接配接。
Spring JDBC 提供幾種方法和資料庫中相應的不同的類與接口。我将給出使用 JdbcTemplate 類架構的經典和最受歡迎的方法。這是管理所有資料庫通信和異常處理的中央架構類。
1.JdbcTemplate 類
JdbcTemplate 類
- 執行 SQL 查詢、更新語句和存儲過程調用,執行疊代結果集和提取傳回參數值。
- 捕獲 JDBC 異常并轉換它們到 org.springframework.dao 包中定義的通用類、更多的資訊、異常層次結構。
JdbcTemplate 類的執行個體是線程安全配置的。是以你可以配置 JdbcTemplate 的單個執行個體,然後将這個共享的引用安全地注入到多個 DAOs 中。
使用 JdbcTemplate 類時常見的做法:
- 在Spring 配置檔案中配置資料源,
- 共享資料源 bean 依賴注入到 DAO 類中,
- 在資料源的設值函數中建立了 JdbcTemplate。
重要步驟如下:
-
配置資料源
建表:我們在資料庫 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)
);
xml檔案中配置資料源:現在,我們需要提供一個資料源到 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>
2.資料通路對象(DAO)
**DAO 代表常用的資料庫互動的資料通路對象。**DAOs 提供一種方法來讀取資料并将資料寫入到資料庫中,它們應該通過一個接口顯示此功能,應用程式的其餘部分将通路它們。
在 Spring 中,資料通路對象(DAO)支援很容易用統一的方法使用資料通路技術,如 JDBC、Hibernate、JPA 或者 JDO。
3.執行SQL語句
使用 SQL 和 jdbcTemplate 對象在資料庫表中執行 CRUD(建立、讀取、更新和删除)操作。
查詢一個整數類型:
String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );
查詢一個long類型
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} );
3.執行DDL語句
使用 jdbcTemplate 中的 execute(…) 方法來執行任何 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 );
例子1:Spring JDBC示例:如何編寫一個簡單地基于Spring應用程式的JDBC
例子2:使用Spring中JDBC時如何調用SQL存儲過程