Spring JDBC框架

weixin_33843409發表於2018-10-31

資料庫使用普通的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)的支援使得它很容易與如JDBC,Hibernate,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_INCREME


原文釋出時間為:2018-10-28

本文來自雲棲社群合作伙伴“Java雜記”,瞭解相關資訊可以關注“Java雜記”。

相關文章