一文解析Spring JDBC Template的使用指导

一文,解析,spring,jdbc,template,使用,指导 · 浏览次数 : 236

小编点评

**摘要** 本文介绍了Spring框架对JDBC的简单封装,包括以下步骤: 1. **导入jar包** 2. **创建JdbcTemplate对象** 3. **执行CRUD操作** 4. **使用BeanPropertyRowMapper自动封装对象** 5. **使用QueryForList和QueryForObject查询所有记录** 6. **使用QueryForMap查询单个记录** **代码示例** ```java JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); // 修改1号数据的 salary template.update("update emp set salary = 10000 where id = 1", 1); // 添加一条记录 template.insert("insert into emp(name,dept_id) values(?,?)", "郭靖", 1); // 删除刚才添加的记录 template.update("delete from emp where id = ?", 7); // 查询id为1的记录,将其封装为Map集合 Map map = template.queryForMap("select * from emp where id = ?", 1); // 查询所有记录,将其封装为List集合 List> list = template.queryForList("select * from emp"); // 查询所有记录,将其封装为Emp对象的List集合 List empList = template.query(sql, new BeanPropertyRowMapper(Emp.class)); ``` **注意** * 这只是一个简单的示例,您可以根据您的需求进行修改。 * 您可以使用其他 RowMapper实现类,例如 BeanPropertyRowMapper 和 ListRowMapper。 * 您可以使用其他查询方法,例如 queryForObject 和 queryForMap,以获取不同的结果。

正文

摘要:Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发。

本文分享自华为云社区《Spring JdbcTemplate使用解析》,作者: 共饮一杯无 。

Spring框架对JDBC的简单封装。提供了一个JDBC Template对象简化JDBC的开发

步骤

1.导入jar包

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

2. 创建JdbcTemplate对象。依赖于数据源DataSource

JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

调用JdbcTemplate的方法来完成CRUD的操作

update():执行DML语句。增、删、改语句
queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

注意:这个方法查询的结果集长度只能是1

queryForList():查询结果将结果集封装为list集合

注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

query():查询结果,将结果封装为JavaBean对象

query的参数:RowMapper

一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

new BeanPropertyRowMapper<类型>(类型.class)

queryForObject:查询结果,将结果封装为对象

一般用于聚合函数的查询

练习

需求

  1. 修改1号数据的 salary 为 10000
  2. 添加一条记录
  3. 删除刚才添加的记录
  4. 查询id为1的记录,将其封装为Map集合
  5. 查询所有记录,将其封装为List
  6. 查询所有记录,将其封装为Emp对象的List集合
  7. 查询总记录数

代码

import com.zjq.javabase.base27.domain.Emp;
import com.zjq.javabase.base27.utils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
 * JdbcTemplate入门
 *
 * @author zjq
 */
public class JdbcTemplateDemo2 {
 //1. 获取JDBCTemplate对象
 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
 /**
     * 1. 修改1号数据的 salary 为 10000
     */
 @Test
 public void test1() {
 //2. 定义sql
 String sql = "update emp set salary = 10000 where id = 1";
 //3. 执行sql
 int count = template.update(sql);
 System.out.println(count);
 }
 /**
     * 2. 添加一条记录
     */
 @Test
 public void test2() {
 String sql = "insert into emp(name,dept_id) values(?,?)";
 int count = template.update(sql, "郭靖", 1);
 System.out.println(count);
 }
 /**
     * 3.删除刚才添加的记录
     */
 @Test
 public void test3() {
 String sql = "delete from emp where id = ?";
 int count = template.update(sql, 7);
 System.out.println(count);
 }
 /**
     * 4.查询id为1的记录,将其封装为Map集合
     * 注意:这个方法查询的结果集长度只能是1
     */
 @Test
 public void test4() {
 String sql = "select * from emp where id = ? ";
 Map<String, Object> map = template.queryForMap(sql, 1);
 System.out.println(map);
 //{id=1, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}
 }
 /**
     * 5. 查询所有记录,将其封装为List
     */
 @Test
 public void test5() {
 String sql = "select * from emp";
 List<Map<String, Object>> list = template.queryForList(sql);
 for (Map<String, Object> stringObjectMap : list) {
 System.out.println(stringObjectMap);
 }
 }
 /**
     * 6. 查询所有记录,将其封装为Emp对象的List集合
     */
 @Test
 public void test6() {
 String sql = "select * from emp";
 List<Emp> list = template.query(sql, new RowMapper<Emp>() {
 @Override
 public Emp mapRow(ResultSet rs, int i) throws SQLException {
 Emp emp = new Emp();
 int id = rs.getInt("id");
 String ename = rs.getString("NAME");
 String gender = rs.getString("gender");
 Date joindate = rs.getDate("join_date");
 double salary = rs.getDouble("salary");
 int dept_id = rs.getInt("dept_id");
 emp.setId(id);
 emp.setName(ename);
 emp.setGender(gender);
 emp.setJoindate(joindate);
 emp.setSalary(salary);
 emp.setDept_id(dept_id);
 return emp;
 }
 });
 for (Emp emp : list) {
 System.out.println(emp);
 }
 }
 /**
     * 6. 查询所有记录,将其封装为Emp对象的List集合
     */
 @Test
 public void test6_2() {
 String sql = "select * from emp";
 List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
 for (Emp emp : list) {
 System.out.println(emp);
 }
 }
 /**
     * 7. 查询总记录数
     */
 @Test
 public void test7() {
 String sql = "select count(id) from emp";
 Long total = template.queryForObject(sql, Long.class);
 System.out.println(total);
 }
}

 

点击关注,第一时间了解华为云新鲜技术~

与一文解析Spring JDBC Template的使用指导相似的内容:

一文解析Spring JDBC Template的使用指导

摘要:Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发。 本文分享自华为云社区《Spring JdbcTemplate使用解析》,作者: 共饮一杯无 。 Spring框架对JDBC的简单封装。提供了一个JDBC Template对象简化JDBC的开发 步

一文详解RocketMQ-Spring的源码解析与实战

摘要:这篇文章主要介绍 Spring Boot 项目使用 rocketmq-spring SDK 实现消息收发的操作流程,同时笔者会从开发者的角度解读 SDK 的设计逻辑。 本文分享自华为云社区《RocketMQ-Spring : 实战与源码解析一网打尽》,作者:勇哥java实战分享。 Rocket

深度长文解析SpringWebFlux响应式框架15个核心组件源码

以上是Spring WebFlux 框架核心组件的全部介绍了,希望可以帮助你全面深入的理解 WebFlux的原理,关注【威哥爱编程】,主页里可查看V哥每天更新的原创技术内容,让我们一起成长。

spring-关于组件的注入及获取流程

一、组件注入的基本流程: 容器初始化: Spring应用启动时,会读取配置(如XML配置、注解配置等),并根据这些配置创建Bean定义(BeanDefinition)。 根据Bean定义,Spring容器实例化Bean,并管理它们之间的依赖关系。 依赖解析与注入: 当一个Bean依赖于另一个Bean

《系列一》-- 5、xml配置文件解析之[自定义]命名空间[标签]的解析

阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证。全系列文章基于 spring 源码 5.x 版本。 Spring源码阅读系列--全局目录.md 引子 1、容器最基本使用.md 系列1 - bean 标签解析: 2、XmlBeanFactory

《系列一》-- 4、xml配置文件解析之[默认]命名空间[标签]的解析

阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证。全系列文章基于 spring 源码 5.x 版本。 Spring源码阅读系列--全局目录.md 引子 1、容器最基本使用.md 系列1 - bean 标签解析: 2、XmlBeanFactory

Spring源码系列:核心概念解析

Spring框架中有许多关键组件,理解这些组件的作用和关系可以帮助我们更好地阅读和理解Spring源码。BeanDefinition是Spring中重要的概念,定义了一个Bean的基本属性和行为,是Spring容器管理Bean的基础。我们可以通过注解或编程方式定义BeanDefinition,然后将其注册到Spring容器中。BeanDefinitionReader是读取和操作BeanDefini

跟我一起学习和开发动态表单系统-前端用vue、elementui实现方法(3)

基于 Vue、Element UI 和 Spring Boot + MyBatis 的动态表单系统前端实现解析 在现代企业信息系统中,动态表单是一种非常常见的功能。它可以根据业务需求灵活地调整表单结构,以满足不同的数据收集和展示需求。在本文中,我们将探讨一种基于 Vue、Element UI 和 S

Spring源码:bean的生命周期(一)

Spring的Bean定义环节是Spring IoC容器中的核心流程之一。在这个过程中,Spring会扫描指定的包路径,找到符合条件的Bean,并将其转换为Bean定义。在这个过程中,Spring使用了ASM技术来解析类的注解信息,判断当前类是否符合要求。然后,Spring将符合条件的Bean定义加入到候选集合中,并对其进行唯一标识命名、默认值赋值、常见定义注解的解析等操作。最后,Spring使用合并的Bean定义来包装原始的Bean定义,以便在Bean实例化的过程中进行更好的管理和控制。

Spring源码:Bean生命周期(四)

在本文中,我们深入探讨了 Spring 框架中 Bean 的实例化过程,关于某些细节以后我会单独拿出一篇文章单独讲解,我们来总结下实例化都做了哪些事情:先从bean定义中加载当前类,因为最初Spring使用ASM技术解析元数据时只获取了当前类的名称寻找所有InstantiationAwareBeanPostProcessors实现类,并调用实例化前的方法postProcessBeforeInsta