Spring?JDBC?框架簡介
JDBC 框架概述
在使用普通的 JDBC 數(shù)據(jù)庫時,就會很麻煩的寫不必要的代碼來處理異常,打開和關閉數(shù)據(jù)庫連接等。但 Spring JDBC 框架負責所有的低層細節(jié),從開始打開連接,準備和執(zhí)行 SQL 語句,處理異常,處理事務,到最后關閉連接。
所以當從數(shù)據(jù)庫中獲取數(shù)據(jù)時,你所做的是定義連接參數(shù),指定要執(zhí)行的 SQL 語句,每次迭代完成所需的工作。
Spring JDBC 提供幾種方法和數(shù)據(jù)庫中相應的不同的類與接口。我將給出使用JdbcTemplate類框架的經(jīng)典和最受歡迎的方法。這是管理所有數(shù)據(jù)庫通信和異常處理的中央框架類。
JdbcTemplate 類
JdbcTemplate 類執(zhí)行 SQL 查詢、更新語句和存儲過程調用,執(zhí)行迭代結果集和提取返回參數(shù)值。它也捕獲 JDBC 異常并轉換它們到 org.springframework.dao 包中定義的通用類、更多的信息、異常層次結構。
JdbcTemplate類的實例是線程安全配置的。所以你可以配置 JdbcTemplate 的單個實例,然后將這個共享的引用安全地注入到多個 DAOs 中。
使用 JdbcTemplate 類時常見的做法是在你的 Spring 配置文件中配置數(shù)據(jù)源,然后共享數(shù)據(jù)源 bean 依賴注入到 DAO 類中,并在數(shù)據(jù)源的設值函數(shù)中創(chuàng)建了 JdbcTemplate。
配置數(shù)據(jù)源
我們在數(shù)據(jù)庫TEST中創(chuàng)建一個數(shù)據(jù)庫表Student。假設你正在使用 MySQL 數(shù)據(jù)庫,如果你使用其他數(shù)據(jù)庫,那么你可以改變你的 DDL 和相應的 SQL 查詢。
CREATE TABLE Student( ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
現(xiàn)在,我們需要提供一個數(shù)據(jù)源到 JdbcTemplate 中,所以它可以配置本身來獲得數(shù)據(jù)庫訪問。你可以在 XML 文件中配置數(shù)據(jù)源,其中一段代碼如下所示:
<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>
數(shù)據(jù)訪問對象(DAO)
DAO 代表常用的數(shù)據(jù)庫交互的數(shù)據(jù)訪問對象。DAOs 提供一種方法來讀取數(shù)據(jù)并將數(shù)據(jù)寫入到數(shù)據(jù)庫中,它們應該通過一個接口顯示此功能,應用程序的其余部分將訪問它們。
在 Spring 中,數(shù)據(jù)訪問對象(DAO)支持很容易用統(tǒng)一的方法使用數(shù)據(jù)訪問技術,如 JDBC、Hibernate、JPA 或者 JDO。
執(zhí)行 SQL 語句
我們看看如何使用 SQL 和 jdbcTemplate 對象在數(shù)據(jù)庫表中執(zhí)行 CRUD(創(chuàng)建、讀取、更新和刪除)操作。
查詢一個整數(shù)類型:
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} );
執(zhí)行 DDL 語句
你可以使用jdbcTemplate中的execute(..)方法來執(zhí)行任何 SQL 語句或 DDL 語句。下面是一個使用 CREATE 語句創(chuàng)建一個表的示例:
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 框架:
到此這篇關于Spring JDBC 框架的文章就介紹到這了,更多相關Spring JDBC 框架內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中Hashtable類與HashMap類的區(qū)別詳解
Hashtable的應用非常廣泛,HashMap是新框架中用來代替Hashtable的類,也就是說建議使用HashMap,不要使用Hashtable??赡苣阌X得Hashtable很好用,為什么不用呢?這里簡單分析他們的區(qū)別。2016-01-01SpringBoot+MyBatisPlus中樂觀鎖的實現(xiàn)示例
樂觀鎖是一種用于解決并發(fā)沖突的機制,在數(shù)據(jù)庫中用于保護數(shù)據(jù)的一致性,本文主要介紹了SpringBoot+MyBatisPlus中樂觀鎖的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2023-08-08hutool實戰(zhàn):IoUtil 流操作工具類(將內容寫到流中)
這篇文章主要介紹了Go語言的io.ioutil標準庫使用,是Golang入門學習中的基礎知識,需要的朋友可以參考下,如果能給你帶來幫助,請多多關注腳本之家的其他內容2021-06-06