一文解析Spring JDBC Template的使用指导
摘要: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号数据的 salary 为 10000
- 添加一条记录
- 删除刚才添加的记录
- 查询id为1的记录,将其封装为Map集合
- 查询所有记录,将其封装为List
- 查询所有记录,将其封装为Emp对象的List集合
- 查询总记录数
代码
- 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的使用指导的更多相关文章
- Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template、Spring异常处理
Unit06: Spring对JDBC的 整合支持 . Spring+JDBC Template .Spring异常处理 1. springmvc提供的异常处理机制 我们可以将异常抛给spring框架 ...
- 一文学会Spring JDBC 使用
Spring JDBC 1.JDBC JDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开发那么一定是离不开 数据库 的,不管你搞的是什么,只要是想使用动态的开发结构,那么一定就是 ...
- spring+jdbc+template+transaction实现
使用spring和jdbc模板事务实现 1.创建实体类: Role package com.wbg.sjt.entity; public class Role { private int id; pr ...
- 从源码解析 Spring JDBC 异常抽象
初入学习 JDBC 操作数据库,想必大家都写过下面的代码: 数据库为:H2 如果需要处理特定 SQL 异常,比如 SQL 语句错误,这个时候我们应该怎么办? 查看 SQLException 源码,我们 ...
- Java泛型在spring jdbc template中的类似应用
泛型的使用保证返回的对象类型的正确: package com.stono.gentest; import java.util.ArrayList; import java.util.List; pub ...
- 【Spring】Spring的数据库开发 - 1、Spring JDBC的配置和Spring JdbcTemplate的解析
Spring JDBC 文章目录 Spring JDBC Spring JdbcTemplate的解析 Spring JDBC的配置 简单记录-Java EE企业级应用开发教程(Spring+Spri ...
- Spring JDBC Framework
引自 :学习经典:Spring JDBC Framework 这里记录我对Spring JDBC框架的学习.由于Spring JDBC和我之前做的工作有很多共同之处,学习经典Framework的设计, ...
- Spring的JDBC Template
Spring的JDBC Template(JDBC模板)简化JDBC API开发,使用上和Apache公司的DBUtils框架非常类似) 快速入门实例 1.创建项目后,导入Spring基础核心开发包. ...
- [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载
问题: 一. 1. Spring 如何处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSession ? 3. propagati ...
- [原理][来源解析]spring于@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关联
Spring 捆绑Hibernate. 夹: 一. 1. Spring 怎样处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSe ...
随机推荐
- js闭包使用之处
1.循环绑定 No Use: var lists = document.getElementsByTagName('li'); for(var i=0;i<lists.length;i& ...
- Net 高级调试之二:CLR和Windows加载器及应用程序域介绍
一.简介 今天是 Net 高级调试的第二篇文章,第一篇文章记录了自己学习 Net 高级调试的第一步,认识一些调试工具,有了工具的倚仗,我们开始仗剑走天涯了,开始Net 高级调试正式的征程了.我先说一下 ...
- 搞懂闭包JavaScript的GC机制
其实不管什么语言,都有一套垃圾回收机制.为什么要有垃圾回收机制?因为内存,程序运行需要内存,如果没有垃圾回收(循环引用,内存泄漏),那么内存占用就会越来越高,轻点说会影响性能卡顿,严重的直接导致崩溃. ...
- 【闭包应用】JS:防抖、节流
1.防抖:当进行连续操作时,只执行最后一次的操作. //防抖的概念是 当进行连续操作时,只执行最后一次的操作. function debounce(fn, delayTime) { let timeo ...
- KubeEdge-Ianvs v0.2 发布:终身学习支持非结构化场景
本文分享自华为云社区<KubeEdge-Ianvs v0.2 发布:终身学习支持非结构化场景>,作者: 云容器大未来. 在边缘计算的浪潮中,AI是边缘云乃至分布式云中最重要的应用.随着边缘 ...
- 使用ResponseSelector实现校园招聘FAQ机器人
本文主要介绍使用ResponseSelector实现校园招聘FAQ机器人,回答面试流程和面试结果查询的FAQ问题.FAQ机器人功能分为业务无关的功能和业务相关的功能2类. 一.data/nlu.y ...
- 终端必备大杀器----Fish
目录 下载 安装 添加 权限 依赖库安装 cmake 预处理 编译 安装 配置fish 其他 下载 Github 地址-- fish-shell openSUSE 开源下载地址 openSUSE 开源 ...
- 3款高评价的.Net开发的WMS系统推荐
本文简介 WMS仓库管理系统是一款专业的仓库管理系统,旨在帮助企业实现仓储管理的智能化.信息化和自动化.通过该系统,企业可以实现对仓库的进货.出货.库存等各个环节的全面把控,提高仓储管理水平,降低运营 ...
- 【luogu题解】T378828 位运算
位运算 题目背景 题目由 daiyulong20120222 创作(me) 并由 QBW1117完善以及数据 . 题目描述 给定两个数\(x,y\) ,在给定一个位运算符号 \(c\). 请你列出 \ ...
- 一行代码解决IE停用后无法继续使用IE弹窗功能的问题
微软在2023年2月14日通过Edge浏览器更新,彻底封死IE.Windows Update中没有记录.开始菜单中的IE以及桌面IE图标双击自动打开Edge,默认程序设置了IE也没有任何效果,仅能通过 ...