一、什么是Spring JDBC?
什么是JDBC?
JDBC(Java Database Connectivity)是 Java 语言访问数据库的标准 API,它定义了一组接口和类,允许 Java 程序与各种数据库进行交互。JDBC 提供了执行 SQL 语句、处理结果集、管理事务等功能,是 Java 与数据库之间的桥梁。
什么是Spring JDBC?
Spring JDBC 是 Spring 框架提供的一个数据访问模块,它简化了 JDBC 的使用,封装了大量重复的代码,如资源管理、异常处理等。Spring JDBC 的核心是JdbcTemplate
类,它提供了执行 SQL 查询、更新和存储过程调用的方法,同时处理了底层 JDBC 资源的创建和释放,大大减少了样板代码。
JdbcTemplate类:
Spring JDBC 是 Spring 框架提供的一个数据访问模块,它简化了 JDBC 的使用,封装了大量重复的代码,如资源管理、异常处理等。Spring JDBC 的核心是JdbcTemplate
类,它提供了执行 SQL 查询、更新和存储过程调用的方法,同时处理了底层 JDBC 资源的创建和释放,大大减少了样板代码。
(1)execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句。
(2)update、batchUpdate方法:用于执行新增、修改与删除等语句。
(3)query和queryForXXX方法:用于执行查询相关的语句。
(4)call方法:用于执行数据库存储过程和函数相关的语句。
二、实际操作
1.Maven POM文件配置
作用:
spring-context
:提供 Spring 的 IoC 容器功能spring-jdbc
:提供 Spring JDBC 模块的核心类mysql-connector-java
:MySQL 数据库的驱动程序junit
:用于编写和运行单元测试
<dependencies>
<!-- Spring Core -->
<!--spring-context:提供 Spring 的 IoC 容器功能-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.21</version>
</dependency>
<!--spring-jdbc:提供 Spring JDBC 模块的核心类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.21</version>
</dependency>
<!--mysql驱动包,MySQL 数据库的驱动程序-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- Junit 测试 用于编写和运行单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2.User实体类
作用:
- 对应数据库中的
user
表- 用于封装从数据库查询到的数据
BeanPropertyRowMapper
会自动将结果集映射到这个类的实例
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
public User() {
}
// setter/getter方法
}
3.Spring配置文件(SpringJBDC.xml)
作用:
dataSource
:配置数据库连接信息
driverClassName
:MySQL 驱动类url
:数据库连接 URLusername/password
:数据库登录凭证jdbcTemplate
:Spring JDBC 的核心类
- 通过
dataSource
属性注入数据源- 负责执行 SQL 语句并处理结果
DriverManagerDataSource
是 Spring 框架提供的一个简单的数据源实现类,位于 org.springframework.jdbc.datasource
包中。它用于创建和管理数据库连接,是 Spring JDBC 模块的基础组件之一。
核心作用
DriverManagerDataSource
的主要功能是:
- 封装数据库连接信息(URL、用户名、密码等)。
- 基于 JDBC 的
DriverManager
创建数据库连接。 - 作为数据源供
JdbcTemplate
或其他持久层工具使用。
<!--配置连接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"></property>
</bean>
4.JBDCTest测试类
public class JBDCTest {
ApplicationContext ctx=new ClassPathXmlApplicationContext("SpringJBDC.xml");;
JdbcTemplate jdbcTemplate= (JdbcTemplate) ctx.getBean("jdbcTemplate");
//关键方法:
//jdbcTemplate.execute(sql):执行任意 SQL 语句,通常用于 DDL 操作
//jdbcTemplate.update(sql, params):执行 INSERT/UPDATE/DELETE 语句,返回受影响的行数
//jdbcTemplate.query(sql, rowMapper):执行查询,使用BeanPropertyRowMapper将结果集自动映射为User对象列表
@Test
public void testInsert(){
String sql="insert into user(username,address) values('李连杰','上海')";
jdbcTemplate.execute(sql);
}
@Test
public void testUpdate(){
String sql="update user set username='稳杰',address='南海' where id=?";
int res=jdbcTemplate.update(sql,2);
System.out.println(res);
}
@Test
public void testDelete(){
String sql="delete from user where id=?";
int res=jdbcTemplate.update(sql,18);
System.out.println(res);
}
//查询列表
@Test
public void testQueryList(){
String sql = "select * from user where address like '%京%'";
List<User> userList= (List<User>) jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class));
System.out.println("查询List: ");
for (User user : userList) {
System.out.println(user);
}
System.out.println("数量: "+userList.size());
}
}
执行流程示例:
- 加载 Spring 配置文件,创建 IoC 容器
- 从容器中获取
JdbcTemplate
实例 - 调用
JdbcTemplate
的update()
方法执行 INSERT 语句 JdbcTemplate
从DataSource
获取连接- 创建 Statement 对象,执行 SQL
- 处理返回结果,关闭资源