目錄
1. Spring JDBC 簡介
2. JdbcTemplate 介紹
3. 創建數據庫和表
4. 配置 Spring JDBC
5. 創建實體類
6. 使用 JdbcTemplate 實現增、刪、改、查操作
7. Spring JDBC 優點
8. 小結
1. Spring JDBC 簡介
????????Spring JDBC 是 Spring 框架中的一個模塊,旨在簡化數據庫訪問操作。它通過封裝底層的 JDBC API,減少了繁瑣的代碼,提高了開發效率。傳統的 JDBC 編程要求開發人員手動處理數據庫連接、SQL 執行、錯誤處理以及資源釋放等。而 Spring JDBC 通過提供 JdbcTemplate
類以及其他輔助工具,屏蔽了這些底層細節,使得數據庫操作更加簡單、直觀且易于維護。
2. JdbcTemplate 介紹
JdbcTemplate
是 Spring 框架中用于簡化 JDBC 操作的核心類,它對傳統的 JDBC API 做了封裝,提供了豐富的方法,方便開發人員進行數據庫操作。主要的操作包括執行增、刪、改、查等操作。
常用的 JdbcTemplate 方法類型
-
execute 方法:
execute
方法可以用于執行任何 SQL 語句,一般用于執行 DDL(Data Definition Language)語句,比如創建表、刪除表等。jdbcTemplate.execute("CREATE TABLE user (...);");
-
update 和 batchUpdate 方法:
update
用于執行新增、修改、刪除等語句。batchUpdate
用于批量執行 SQL 操作,可以顯著提高效率。
jdbcTemplate.update("INSERT INTO user (username, address) VALUES (?, ?)", "李連杰", "上海");
-
query 和 queryForXXX 方法:
query
用于查詢返回多個結果的 SQL 語句。queryForObject
、queryForList
等方法用于查詢單個對象或列表。
List<User> users = jdbcTemplate.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class));
-
call 方法:
call
方法用于執行數據庫的存儲過程或函數。jdbcTemplate.call("{CALL some_procedure(?)}", params);
3. 創建數據庫和表
首先,我們需要在 MySQL 數據庫中創建一個示例數據庫,并在其中創建一個簡單的用戶表 user
:
CREATE DATABASE mybatis_demo;USE mybatis_demo;CREATE TABLE `user` (`id` INT(11) NOT NULL AUTO_INCREMENT,`username` VARCHAR(32) NOT NULL COMMENT '用戶名稱',`birthday` DATETIME DEFAULT NULL COMMENT '生日',`sex` CHAR(1) DEFAULT NULL COMMENT '性別',`address` VARCHAR(256) DEFAULT NULL COMMENT '地址',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 插入一些示例數據
INSERT INTO `user` (`id`, `username`, `birthday`, `sex`, `address`) VALUES
(1, '老王', '2018-02-27 17:47:08', '男', '北京'),
(2, '熊大', '2018-03-02 15:09:37', '女', '上海'),
(3, '熊二', '2018-03-04 11:34:34', '女', '深圳'),
(4, '光頭強', '2018-03-04 12:04:06', '男', '廣州');
4. 配置 Spring JDBC
接下來,我們在 Spring 配置文件中添加數據庫連接池和 JdbcTemplate
配置:
applicationContext.xml
配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置連接池 DriverManagerDataSource --><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/mybatis_demo"/><property name="username" value="root"/><property name="password" value="2020"/></bean><!-- 配置 JdbcTemplate --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>
5. 創建實體類
在 Java 中,我們需要為 user
表創建一個實體類 User
,該類的屬性應與數據庫表的列對應:
public class User {private Integer id;private String username;private Date birthday;private String sex;private String address;// getters and setters
}
6. 使用 JdbcTemplate 實現增、刪、改、查操作
插入數據
@Test
public void testInsert() {String sql = "INSERT INTO user (username, address) VALUES (?, ?)";jdbcTemplate.update(sql, "李連杰", "上海");
}
更新數據
@Test
public void testUpdate() {String sql = "UPDATE user SET username = ?, address = ? WHERE id = ?";int result = jdbcTemplate.update(sql, "穩杰", "南海", 2);System.out.println("更新的記錄數: " + result);
}
刪除數據
@Test
public void testDelete() {String sql = "DELETE FROM user WHERE id = ?";int result = jdbcTemplate.update(sql, 18);System.out.println("刪除的記錄數: " + result);
}
查詢數據(單表查詢)
@Test
public void testQueryList() {String sql = "SELECT * FROM user WHERE address LIKE '%京%'";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));System.out.println("查詢結果:");for (User user : users) {System.out.println(user);}
}
查詢單個對象
@Test
public void testQueryForObject() {String sql = "SELECT * FROM user WHERE id = ?";User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 1);System.out.println(user);
}
7. Spring JDBC 優點
- 簡化數據庫操作:
JdbcTemplate
封裝了 JDBC 操作,減少了開發人員手動處理數據庫連接、異常捕獲、資源釋放等的工作。 - 降低代碼冗余:對于同類型的操作(如執行增刪改查),不再需要寫重復的代碼,減少了開發工作量。
- 支持事務管理:Spring JDBC 與 Spring 的事務管理無縫集成,能有效管理數據庫事務。
- 靈活性高:盡管 Spring JDBC 封裝了很多常見操作,但它并沒有限制開發人員的操作,開發者可以使用原生 SQL 執行任何復雜的數據庫操作。
8. 小結
????????通過使用 Spring JDBC 和 JdbcTemplate
,我們可以大大簡化數據庫操作。Spring JDBC 提供了高效的資源管理、異常處理、SQL 執行等能力,使得開發人員能夠更加專注于業務邏輯的實現,而不必糾結于底層的數據庫操作細節。結合 Spring 的事務管理機制,可以保證數據庫操作的可靠性和一致性。
????????Spring JDBC 的強大功能,使其在許多中小型項目中成為數據庫操作的首選方案,尤其是在不需要 ORM(如 Hibernate)框架的情況下,Spring JDBC 提供了簡潔而高效的數據庫訪問方式。