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

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

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

步骤

1.导入jar包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-jdbc</artifactId>
  4. </dependency>

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

  1. 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. 查询总记录数

代码

  1. import com.zjq.javabase.base27.domain.Emp;
  2. import com.zjq.javabase.base27.utils.JDBCUtils;
  3. import org.junit.Test;
  4. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.jdbc.core.RowMapper;
  7. import java.sql.Date;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * JdbcTemplate入门
  14. *
  15. * @author zjq
  16. */
  17. public class JdbcTemplateDemo2 {
  18. //1. 获取JDBCTemplate对象
  19. private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
  20. /**
  21. * 1. 修改1号数据的 salary 为 10000
  22. */
  23. @Test
  24. public void test1() {
  25. //2. 定义sql
  26. String sql = "update emp set salary = 10000 where id = 1";
  27. //3. 执行sql
  28. int count = template.update(sql);
  29. System.out.println(count);
  30. }
  31. /**
  32. * 2. 添加一条记录
  33. */
  34. @Test
  35. public void test2() {
  36. String sql = "insert into emp(name,dept_id) values(?,?)";
  37. int count = template.update(sql, "郭靖", 1);
  38. System.out.println(count);
  39. }
  40. /**
  41. * 3.删除刚才添加的记录
  42. */
  43. @Test
  44. public void test3() {
  45. String sql = "delete from emp where id = ?";
  46. int count = template.update(sql, 7);
  47. System.out.println(count);
  48. }
  49. /**
  50. * 4.查询id为1的记录,将其封装为Map集合
  51. * 注意:这个方法查询的结果集长度只能是1
  52. */
  53. @Test
  54. public void test4() {
  55. String sql = "select * from emp where id = ? ";
  56. Map<String, Object> map = template.queryForMap(sql, 1);
  57. System.out.println(map);
  58. //{id=1, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}
  59. }
  60. /**
  61. * 5. 查询所有记录,将其封装为List
  62. */
  63. @Test
  64. public void test5() {
  65. String sql = "select * from emp";
  66. List<Map<String, Object>> list = template.queryForList(sql);
  67. for (Map<String, Object> stringObjectMap : list) {
  68. System.out.println(stringObjectMap);
  69. }
  70. }
  71. /**
  72. * 6. 查询所有记录,将其封装为Emp对象的List集合
  73. */
  74. @Test
  75. public void test6() {
  76. String sql = "select * from emp";
  77. List<Emp> list = template.query(sql, new RowMapper<Emp>() {
  78. @Override
  79. public Emp mapRow(ResultSet rs, int i) throws SQLException {
  80. Emp emp = new Emp();
  81. int id = rs.getInt("id");
  82. String ename = rs.getString("NAME");
  83. String gender = rs.getString("gender");
  84. Date joindate = rs.getDate("join_date");
  85. double salary = rs.getDouble("salary");
  86. int dept_id = rs.getInt("dept_id");
  87. emp.setId(id);
  88. emp.setName(ename);
  89. emp.setGender(gender);
  90. emp.setJoindate(joindate);
  91. emp.setSalary(salary);
  92. emp.setDept_id(dept_id);
  93. return emp;
  94. }
  95. });
  96. for (Emp emp : list) {
  97. System.out.println(emp);
  98. }
  99. }
  100. /**
  101. * 6. 查询所有记录,将其封装为Emp对象的List集合
  102. */
  103. @Test
  104. public void test6_2() {
  105. String sql = "select * from emp";
  106. List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
  107. for (Emp emp : list) {
  108. System.out.println(emp);
  109. }
  110. }
  111. /**
  112. * 7. 查询总记录数
  113. */
  114. @Test
  115. public void test7() {
  116. String sql = "select count(id) from emp";
  117. Long total = template.queryForObject(sql, Long.class);
  118. System.out.println(total);
  119. }
  120. }

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

一文解析Spring JDBC Template的使用指导的更多相关文章

  1. Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template、Spring异常处理

    Unit06: Spring对JDBC的 整合支持 . Spring+JDBC Template .Spring异常处理 1. springmvc提供的异常处理机制 我们可以将异常抛给spring框架 ...

  2. 一文学会Spring JDBC 使用

    Spring JDBC 1.JDBC JDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开发那么一定是离不开 数据库 的,不管你搞的是什么,只要是想使用动态的开发结构,那么一定就是 ...

  3. spring+jdbc+template+transaction实现

    使用spring和jdbc模板事务实现 1.创建实体类: Role package com.wbg.sjt.entity; public class Role { private int id; pr ...

  4. 从源码解析 Spring JDBC 异常抽象

    初入学习 JDBC 操作数据库,想必大家都写过下面的代码: 数据库为:H2 如果需要处理特定 SQL 异常,比如 SQL 语句错误,这个时候我们应该怎么办? 查看 SQLException 源码,我们 ...

  5. Java泛型在spring jdbc template中的类似应用

    泛型的使用保证返回的对象类型的正确: package com.stono.gentest; import java.util.ArrayList; import java.util.List; pub ...

  6. 【Spring】Spring的数据库开发 - 1、Spring JDBC的配置和Spring JdbcTemplate的解析

    Spring JDBC 文章目录 Spring JDBC Spring JdbcTemplate的解析 Spring JDBC的配置 简单记录-Java EE企业级应用开发教程(Spring+Spri ...

  7. Spring JDBC Framework

    引自 :学习经典:Spring JDBC Framework 这里记录我对Spring JDBC框架的学习.由于Spring JDBC和我之前做的工作有很多共同之处,学习经典Framework的设计, ...

  8. Spring的JDBC Template

    Spring的JDBC Template(JDBC模板)简化JDBC API开发,使用上和Apache公司的DBUtils框架非常类似) 快速入门实例 1.创建项目后,导入Spring基础核心开发包. ...

  9. [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载

    问题: 一. 1. Spring 如何处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSession ? 3. propagati ...

  10. [原理][来源解析]spring于@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关联

    Spring 捆绑Hibernate. 夹: 一.  1. Spring 怎样处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSe ...

随机推荐

  1. js闭包使用之处

    1.循环绑定 No Use:   var lists = document.getElementsByTagName('li');   for(var i=0;i<lists.length;i& ...

  2. Net 高级调试之二:CLR和Windows加载器及应用程序域介绍

    一.简介 今天是 Net 高级调试的第二篇文章,第一篇文章记录了自己学习 Net 高级调试的第一步,认识一些调试工具,有了工具的倚仗,我们开始仗剑走天涯了,开始Net 高级调试正式的征程了.我先说一下 ...

  3. 搞懂闭包JavaScript的GC机制

    其实不管什么语言,都有一套垃圾回收机制.为什么要有垃圾回收机制?因为内存,程序运行需要内存,如果没有垃圾回收(循环引用,内存泄漏),那么内存占用就会越来越高,轻点说会影响性能卡顿,严重的直接导致崩溃. ...

  4. 【闭包应用】JS:防抖、节流

    1.防抖:当进行连续操作时,只执行最后一次的操作. //防抖的概念是 当进行连续操作时,只执行最后一次的操作. function debounce(fn, delayTime) { let timeo ...

  5. KubeEdge-Ianvs v0.2 发布:终身学习支持非结构化场景

    本文分享自华为云社区<KubeEdge-Ianvs v0.2 发布:终身学习支持非结构化场景>,作者: 云容器大未来. 在边缘计算的浪潮中,AI是边缘云乃至分布式云中最重要的应用.随着边缘 ...

  6. 使用ResponseSelector实现校园招聘FAQ机器人

      本文主要介绍使用ResponseSelector实现校园招聘FAQ机器人,回答面试流程和面试结果查询的FAQ问题.FAQ机器人功能分为业务无关的功能和业务相关的功能2类. 一.data/nlu.y ...

  7. 终端必备大杀器----Fish

    目录 下载 安装 添加 权限 依赖库安装 cmake 预处理 编译 安装 配置fish 其他 下载 Github 地址-- fish-shell openSUSE 开源下载地址 openSUSE 开源 ...

  8. 3款高评价的.Net开发的WMS系统推荐

    本文简介 WMS仓库管理系统是一款专业的仓库管理系统,旨在帮助企业实现仓储管理的智能化.信息化和自动化.通过该系统,企业可以实现对仓库的进货.出货.库存等各个环节的全面把控,提高仓储管理水平,降低运营 ...

  9. 【luogu题解】T378828 位运算

    位运算 题目背景 题目由 daiyulong20120222 创作(me) 并由 QBW1117完善以及数据 . 题目描述 给定两个数\(x,y\) ,在给定一个位运算符号 \(c\). 请你列出 \ ...

  10. 一行代码解决IE停用后无法继续使用IE弹窗功能的问题

    微软在2023年2月14日通过Edge浏览器更新,彻底封死IE.Windows Update中没有记录.开始菜单中的IE以及桌面IE图标双击自动打开Edge,默认程序设置了IE也没有任何效果,仅能通过 ...