目录
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/beans
http://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 提供了简洁而高效的数据库访问方式。