文章目录
- 介绍
- 使用步骤
- 常用方法
- 示例代码
介绍
所谓 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*/@Testpublic 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*/@Testpublic 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*/@Testpublic void test3() {// 定义SQL语句String sql = "select * from emp where id = ?";// 执行SQL语句Map<String, Object> map = jtpt.queryForMap(sql, 1);System.out.println(map);}/*** 查询多条记录,返回一个List集合,集合中存放每条记录对应的Map对象** @author liaowenxiong* @date 2021/11/19 10:52*/@Testpublic void test4() {// 定义SQL语句String sql = "select * from emp";// 执行SQL语句List<Map<String, Object>> list = jtpt.queryForList(sql);for (Map<String, Object> map : list) {System.out.println(map);}// System.out.println(list);}/*** 查询多条记录,将每条记录映射成JavaBean对象,并将JavaBean对象装载到List中,返回该List* @author liaowenxiong* @date 2021/11/19 23:00*/@Testpublic void test5() {// 定义SQL语句String sql = "select * from emp";// 执行SQL语句List<Emp> 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*/@Testpublic void test6() {// 定义SQL语句String sql = "select * from emp";// 执行SQL语句List<Emp> emps = jtpt.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));for (Emp emp : emps) {System.out.println(emp);}}/*** 查询emp表中总的记录数* @author liaowenxiong* @date 2021/11/19 22:59*/@Testpublic void test7() {// 定义SQL语句String sql = "select count(id) from emp";// 执行SQL语句// 希望将查询结果封装成什么类型,就传递什么类型的Class对象Integer i = jtpt.queryForObject(sql, Integer.class);System.out.println(i);}}