1 学习目标
- 了解JDBCTemplate
- 重点掌握JDBCTemplate常用方法
- 重点掌握SpringBoot项目整个JDBCTemplate
- 重点掌握JDBCTemplate的CRUD操作
2 JDBCTemplate介绍
- JDBCTemplate是Spring官方提供的,基于jdbc技术访问数据库的一个API对象。此对象基于模板方法模式,对JDBC操作进行了封装。我们可以基于此对象,以更简单的一个步骤操作数据库中的数据。
- 我们只要在springboot工程中添加了spring-boot-starter-jdbc依赖,服务启动时,就会构建此对象,所以,你用的时候直接从spring容器去获取即可。
3 JDBCTemplate常用方法
-
update():执行DML语句。增、删、改语句
-
queryForMap() :查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
注意:这个方法查询的结果集长度只能是1
-
queryForList():查询结果将结果集封装为list集合
注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
-
query():查询结果,将结果封装为JavaBean对象
query的参数:RowMapper
一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
new BeanPropertyRowMapper<类型>(类型.class)
-
queryForObject:查询结果,将结果封装为对象
一般用于聚合函数的查询
4 SpringBoot整合JDBCTemplate
4.1 创建项目
- 在JSDSecondStage项目下创建**
JDBCTemplateDemo
**模块,修改版本号为2.5.4
4.2 导入依赖
①**pom.xml
**
html
<!--mysql数据库驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--spring对象jdbc支持(此时会默认帮我们下载HiKariCP连接池,并且也会下载JDBCTemplate相关依赖)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
4.3 修改配置文件
①application.yml
#添加数据源的信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/hr?useUnicode=true&characterEncoding=utf8&serverTimeZone=Asia/Shanghai
username: root
password: root
4.4 入门案例
- 将
TestJDBCTemplate
类复制到当前项目中
①**TestJDBCTemplate
类中的test01
方法**
java
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* JDBCTemplate入门案例
*/
@Test
public void test01() {
//1.定义SQL
String sql = "INSERT INTO jobs VALUES('TEST01','DATA01',10000,30000)";
//2.调用update执行SQL
int rows = jdbcTemplate.update(sql);
System.out.println(rows > 0 ? "新增成功!" : "新增失败!!");
}
5 JDBCTemplate的CRUD操作
5.1 查询操作
5.1 查询jobs表中的所有记录
-
queryForList():查询结果将结果集封装为list集合
注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
①**TestJDBCTemplate
类中的testQueryForList
方法**
java
/**
* 通过JDBCTemplate查询jobs表中的所有记录,并存储到List集合中
*/
@Test
public void testQueryForList() {
//1.定义SQL
String sql = "SELECT job_id,job_title,min_salary,max_salary FROM jobs";
//2.调用queryForList执行SQL
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
//3.遍历记过,输出所有记录
for (Map<String, Object> map : maps) {
System.out.println(map);
}
}
5.2 查询jobs表中指定job_id值的记录
-
queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
注意:这个方法查询的结果集长度只能是1
①**TestJDBCTemplate
类中的testQueryForMap
方法**
java
/**
* 通过JDBCTemplate查询jobs表中job_id的值为'TEST1'的记录,并将结果封装到Map中
*/
@Test
public void testQueryForMap() {
//1.定义SQL
String sql = "SELECT job_id,job_title,min_salary,max_salary FROM jobs WHERE job_id= ?";
//2.调用queryForMap执行SQL
Map<String, Object> map = jdbcTemplate.queryForMap(sql, "TEST01");
//3.输出结果
System.out.println(map);
}
5.3 查询jobs表中jobs_id以S开头的记录,并将结果封装到指定的对象
-
query():查询结果,将结果封装为JavaBean对象
-
query的参数:rowMapper
一般我们使用BeanPropertyRowMapper实现类。
可以完成数据到JavaBean的自动封装 new BeanPropertyRowMapper<类型>(类型.class)
①**TestJDBCTemplate
类中的testQuery
方法**
java
/**
* 通过JDBCTemplate查询jobs表中job_id以'S'开头的所有记录,并将结果封装到Jobs中
*/
@Test
public void testQuery() {
//1.定义SQL
String sql = "SELECT job_id,job_title,min_salary,max_salary FROM jobs WHERE job_id LIKE ?";
//2.执行SQL语句,指定将结果集封装到对应的实体类中,并且传入对应的参数
List<Jobs> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Jobs.class),"S%");
//3.遍历记过,输出所有记录
for (Jobs job : list) {
System.out.println(job);
}
}
②**Jobs
**
java
package cn.tedu.pojo;
public class Jobs {
//属性和表中的字段保持一致
private String jobId;
private String jobTitle;
private Double minSalary;
private Double maxSalary;
public String getJobId() {
return jobId;
}
public void setJobId(String jobId) {
this.jobId = jobId;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
public Double getMinSalary() {
return minSalary;
}
public void setMinSalary(Double minSalary) {
this.minSalary = minSalary;
}
public Double getMaxSalary() {
return maxSalary;
}
public void setMaxSalary(Double maxSalary) {
this.maxSalary = maxSalary;
}
@Override
public String toString() {
return "Jobs{" +
"jobId='" + jobId + '\'' +
", jobTitle='" + jobTitle + '\'' +
", minSalary=" + minSalary +
", maxSalary=" + maxSalary +
'}';
}
}
5.4 查询jobs表的总记录数
-
queryForObject:查询结果,将结果封装为对象
一般用于聚合函数的查询
①**TestJDBCTemplate
类中的testQueryForObject
方法**
java
/**
* 通过JDBCTemplate查询jobs表总记录数
*/
@Test
public void testQueryForObject() {
//1.定义SQL
String sql = "SELECT COUNT(job_id) FROM jobs";
//2.执行SQL语句,指定将结果集封装到对应的实体类中,并且传入对应的参数
Long total = jdbcTemplate.queryForObject(sql, Long.class);
//3.输出查询总记录数
System.out.println(total);
}
5.2 增删改操作
- update():执行DML语句。增、删、改语句
5.2.1 向jobs表中插入一条记录
①**TestJDBCTemplate
类中的testAdd
方法**
java
/**
* 通过JDBCTemplate向jobs表中插入一条记录,其中:
* job_id为 'TEST02',
* job_title为 "DATA02"
* min_salary为 2000
* max_salary为 20000
*/
@Test
public void testAdd() {
//1.定义SQL
String sql = "INSERT INTO jobs (job_id,job_title,min_salary,max_salary) values (?,?,?,?)";
//2.将参数以数组的形式封装
Object[] args = {"TEST02", "DATA02", 2000, 20000};
int rows = jdbcTemplate.update(sql, args);
System.out.println(rows > 0 ? "新增成功!" : "新增失败!");
}
5.2.2 修改刚才添加的记录的部分数据
①**TestJDBCTemplate
类中的testUpdate
方法**
java
/**
* 通过JDBCTemplate将jobs表中job_id为'TEST02'的记录的min_salary的值改为10000,max_salary的值改为40000
*/
@Test
void testUpdate() {
//1.定义SQL
String sql = "update jobs set min_salary = ?,max_salary = ? where job_id=? ";
//2.将参数封装为数组
Object[] args = {10000, 40000, "TEST02"};
int rows = jdbcTemplate.update(sql, args);
System.out.println(rows > 0 ? "修改成功!" : "修改失败!");
}