小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java專家陶賢斌詮釋Spring JDBC 框架

 大文豪賢斌學長 2020-05-02

在Spring JDBC模塊中,所有的類可以被分到四個單獨的包:

Core,即核心包,它包含了JDBC的核心功能。此包內(nèi)有很多重要的類,包括:JdbcTemplate類、SimpleJdbcInsert類,SimpleJdbcCall類,以及NamedParameterJdbcTemplate類。

Datasource,即數(shù)據(jù)源包,訪問數(shù)據(jù)源的實用工具類。它有多種數(shù)據(jù)源的實現(xiàn),可以在JavaEE容器外部測試JDBC代碼。

Object,即對象包,以面向?qū)ο蟮姆绞皆L問數(shù)據(jù)庫。它允許執(zhí)行查詢并返回結果作為業(yè)務對象。它可以在數(shù)據(jù)表的列和業(yè)務對象的屬性之間映射查詢結果。

Support,即支持包,是core包和object包的支持類。例如提供了異常轉換功能的SQLException類。

在使用普通的 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 查詢、更新語句和存儲過程調(diào)用,執(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 );

建議諸位實踐一下上述數(shù)據(jù)庫里的操作!

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多