JdbcTemplate概述
Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
准备工作
导入jar包
druid-1.1.9.jar
、mysql-connector-java-8.0.29.jar
这个需要根据自己安装的MySQL版本选择不同版本的jar包、spring-jdbc-5.3.23.jar
、spring-tx-5.3.23.jar
、spring-orm-5.3.23.jar
在 spring 配置文件中配置连接池
1
2
3
4prop.driverClass=com.mysql.jdbc.Driver
prop.url=jdbc:mysql://localhost:3306/userDb
prop.username=root
prop.password=root1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- 引入context名称空间 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 引入外部属性文件配置连接池 -->
<!--引入外部属性文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${prop.driverClass}"></property>
<property name="url" value="${prop.url}"></property>
<property name="username" value="${prop.userName}"></property>
<property name="password" value="${prop.password}"></property>
</bean>
</beans>配置 JdbcTemplate对象,注入 DataSource
1
2
3
4
5<!-- 创建JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入dataSource数据源信息,使用set方法注入 -->
<property name="dataSource" ref="dataSource"></property>
</bean>创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象
开启组件扫描,目的是可以使用注解注入对象
1
2<!-- 开启组件扫描,可以使用注解注入对象 -->
<context:component-scan base-package="com.xzt.spring5"></context:component-scan>创建 dao 注入 JdbcTemplate 对象
1
2
3
4
5
6
7
public class BookDaoImpl implements BookDao{
// 注入jdbcTemplate对象
private JdbcTemplate jdbcTemplate;
}创建 service 类,注入dao对象
1
2
3
4
5
6
7
public class BookService {
// 注入dao
private BookDao bookDao;
}
JdbcTemplate数据库操作
添加功能
1 | insert into 表名(字段1, 字段2, ...) values(值, 值, ....); |
实现步骤
添加数据库表对应的实体类
编写 service 和 dao,在dao里面实现数据库添加操作。调用 JdbcTemplate 对象中的
update
方法实现添加操作。- 第一个参数:sql语句
- 第二个参数:可变参数,设置sql语句值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class BookDaoImpl implements BookDao {
// 注入jdbcTemplate对象
private JdbcTemplate jdbcTemplate;
// 添加方法
public void add(Book book) {
// 创建sql语句
String sql = "insert into t_book values(?, ?, ?)";
// 调用方法实现。
Object[] args = {book.getBookId(), book.getBookusername(), book.getBstatus()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
}测试类
1
2
3
4
5
6
7
8
9
public void testDemo01() {
// 创建bookService对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
BookService bookService = context.getBean("bookService", BookService.class);
// 调用方法
bookService.addBook(new Book(1, "Spring5", "Y"));
}
修改和删除功能
1 | update 表名 set 字段1 = 值, 字段2 = 值 where 字段3 = 值; |
1 | // 修改方法 |
查询功能
查询返回某个值
使用queryForObject
函数:
- 第一个参数:sql 语句
- 第二个参数:
返回类型.class
1 | // 查询表记录数 |
查询返回对象
使用queryForObject
方法,有三个参数
- 第一个参数:sql 语句
- 第二个参数:
RowMapper
,是接口,返回不同类型的数据,使用这个接口里面实现类BeanPropertyRowMapper
完成数据封装。 - 第三个参数:返回值的数据类型
1 | // 查询返回对象 |
查询返回集合
使用queryForList
方法。有三个参数:
- 第一个参数:sql 语句
- 第二个参数:
RowMapper
,是接口,返回不同类型的数据,使用这个接口里面实现类BeanPropertyRowMapper
完成数据封装。 - 第三个参数:返回值的数据类型
1 | // 查询集合列表 |
批量添加/修改/删除
操作表里的多条记录。使用 JdbcTemplate 中的 batchUpdate
方法,有两个参数:
- 第一个参数:sql语句
- 第二个参数:
List<Object[]>
list集合,添加多条数据记录。
底层原理:遍历 list 集合,对每个数组值进行 sql 操作。
1 | // 批量添加 |