文章目录
介绍
- 介绍
- 使用步骤
- 常用方法
- 示例代码
所谓 Spring JDBC,是 Spring 框架对 JDBC 的简单封装。提供了一个 JdbcTemplate 对象简化 JDBC 的开发。
使用步骤步骤: 1.导入相关的 jar 包
2.创建 JdbcTemplate 对象,依赖于数据源 DataSource
JdbcTemplate template = new JdbcTemplate(ds);
3.调用 JdbcTemplate 的方法来完成 CRUD 的操作
常用方法1.update():执行 DML 语句。增、删、改语句
2.queryForMap() :将结果集封装为Map集合返回,并且查询结果只能返回一条记录,即结果集的长度只能是 1,没有记录返回或者返回多条记录都会报错。 查询的数据记录的列名作为 key,列的值作为 value,保存在 Map 集合中
3.queryForList():将结果集封装为List集合返回,可以查询一条或者多条记录。一条记录封装成一个 Map 对象,再把 Map 对象保存在 List 集合对象中
4.query():将结果封装为JavaBean对象集合。将每条记录封装成 JavaBean 对象,然后装载入集合中,并返回这个集合。
query的参数类型:RowMapper 一般我们使用 BeanPropertyRowMapper 实现类。 可以完成数据到 JavaBean 对象集合的自动封装
new BeanPropertyRowMapper(类型.class)
5.queryForObject :将结果封装为对象,一般用于聚合函数的查询
示例代码package priv.lwx.javaex.jdbctemplate;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import priv.lwx.javaex.datasource.util.JdbcUtils;
import priv.lwx.javaex.jdbctemplate.entity.Emp;
import java.math.BigDecimal;
import java.sql.Date;
import java.util.List;
import java.util.Map;
/**
* 使用单元测工具Junit来测试JdbcTemplate的CRUD
*
* @author liaowenxiong
* @date 2021/11/18 22:55
*/
public class JdbcTemplateDemo02 {
// 1.获取JdbcTemplate对象
JdbcTemplate jtpt = new JdbcTemplate(JdbcUtils.getDataSource());
/**
* 更新数据
*
* @author liaowenxiong
* @date 2021/11/19 10:56
*/
@Test
public void test1() {
// 2.定义SQL语句
String sql = "update Emp set salary = 10000 where id = 1";
// 3.执行SQL语句
int i = jtpt.update(sql);
}
/**
* 插入数据
*
* @author liaowenxiong
* @date 2021/11/19 10:56
*/
@Test
public void test2() {
// 2.定义SQL语句
String sql = "INSERT INTO user(id, account_name, PASSWORD) values (?,?,?)";
// 3.执行SQL语句
int i = jtpt.update(sql, null, "wujie", "567");
System.out.println(i);
}
/**
* 查询某条记录
*
* @author liaowenxiong
* @date 2021/11/19 10:52
*/
@Test
public void test3() {
// 定义SQL语句
String sql = "select * from emp where id = ?";
// 执行SQL语句
Map map = jtpt.queryForMap(sql, 1);
System.out.println(map);
}
/**
* 查询多条记录,返回一个List集合,集合中存放每条记录对应的Map对象
*
* @author liaowenxiong
* @date 2021/11/19 10:52
*/
@Test
public void test4() {
// 定义SQL语句
String sql = "select * from emp";
// 执行SQL语句
List list = jtpt.queryForList(sql);
for (Map map : list) {
System.out.println(map);
}
// System.out.println(list);
}
/**
* 查询多条记录,将每条记录映射成JavaBean对象,并将JavaBean对象装载到List中,返回该List
* @author liaowenxiong
* @date 2021/11/19 23:00
*/
@Test
public void test5() {
// 定义SQL语句
String sql = "select * from emp";
// 执行SQL语句
List emps = jtpt.query(sql, (rs, i) ->{
int id = rs.getInt("id");
String name = rs.getString("name");
int job_id = rs.getInt("job_id");
int mgr = rs.getInt("mgr");
Date hiredate = rs.getDate("hiredate");
BigDecimal salary = rs.getBigDecimal("salary");
BigDecimal bonus = rs.getBigDecimal("bonus");
int dept_id = rs.getInt("dept_id");
Emp emp = new Emp();
emp.setId(id);
emp.setName(name);
emp.setJob_id(job_id);
emp.setMgr(mgr);
emp.setHiredate(hiredate);
emp.setSalary(salary);
emp.setBonus(bonus);
emp.setDept_id(dept_id);
return emp;
});
for (Emp emp : emps) {
System.out.println(emp);
}
}
/**
* 使用RowMapper的实现类BeanPropertyRowMapper完成自动封装
* @author liaowenxiong
* @date 2021/11/19 22:53
*/
@Test
public void test6() {
// 定义SQL语句
String sql = "select * from emp";
// 执行SQL语句
List emps = jtpt.query(sql, new BeanPropertyRowMapper(Emp.class));
for (Emp emp : emps) {
System.out.println(emp);
}
}
/**
* 查询emp表中总的记录数
* @author liaowenxiong
* @date 2021/11/19 22:59
*/
@Test
public void test7() {
// 定义SQL语句
String sql = "select count(id) from emp";
// 执行SQL语句
// 希望将查询结果封装成什么类型,就传递什么类型的Class对象
Integer i = jtpt.queryForObject(sql, Integer.class);
System.out.println(i);
}
}