Spring JDBC的学习

文章目录

  • 介绍
  • 使用步骤
  • 常用方法
  • 示例代码

介绍

所谓 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);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编写脚本电脑怎么编写界面_在任何无法理解的情况下,请编写脚本

编写脚本电脑怎么编写界面脚本编写是使您的应用程序在运行时就可根据客户需求进行调整的最流行的方法之一。 与往常一样&#xff0c;此方法不仅带来好处&#xff0c;例如&#xff0c;在灵活性和可管理性之间存在众所周知的折衷方案。 本文不是从理论上讨论优缺点的文章之一&…

stack java实现_Stack (堆栈)使用JAVA实现

代码如下&#xff1a;import java.util.AbstractList;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.RandomAccess;public class Stack extends AbstractListimplements List, RandomAccess, Cloneable, java.io.Serializable{pr…

HTML特殊符号/特殊字符

注&#xff1a;实体名称大小写敏感 点击查看更多特殊字符

访客模式 无痕模式 区别_旧访客设计模式的新生活

访客模式 无痕模式 区别介绍 访客 [1、2]是众所周知的经典设计模式。 有很多资源对其进行了详细说明。 在不深入研究实现的情况下&#xff0c;我将简要提醒一下该模式的概念&#xff0c;解释其优点和缺点&#xff0c;并提出一些可以使用Java编程语言轻松应用于其的改进。 古典…

HTML的图片标签img的图片地址

使用相对路径&#xff0c;例如&#xff0c;当前目录中的子目录 image 中的图片 1.jpg&#xff0c;可以写成 ./image/1.jpg&#xff0c;其中 ./ 表示当前目录&#xff0c;可以省略不写。 <img src"image/1.jpg"/>实际上HTML文档数据写入到 Response 中时&#…

java swing 左上角图标_科学网—Matlab: 学习GUI(修改窗口左上角图标而不warning) - 刘磊的博文...

网上常用的方法&#xff1a;if ~isdeployednewIconjavax.swing.ImageIcon(.piciap.jpg);elsenewIconjavax.swing.ImageIcon(iap.jpg);endjFrame get(hObject,javaframe);jFrame.setFigureIcon(newIcon);运行后warning&#xff1a;Warning: figure JavaFrame property will be …

pbfunc外部扩展函数_从外部CorDapp扩展和覆盖流

pbfunc外部扩展函数Corda 4于上周&#xff08;2月21日&#xff09;发布&#xff0c;带来了大量的新功能&#xff0c;使Corda更加令人愉快。 老实说&#xff0c;我有点假设有很多新功能。 我快速浏览了变更日志&#xff0c;主要是看到我的贡献被引用&#xff0c;但是我记得看到很…

表单项标签的input标签的单选框(radio)

<input type"radio" name"gender" value"male"> 男 <input type"radio" name"gender" value"female"> 女1.单选框需要注意的是&#xff0c;如果是属于一组的选项&#xff0c;那么 name 属性的值必须相…

java 6 update 3_Java(TM) 6 Update(java运行环境) V 6.0.450.6 官方版

Java(TM) 6 Update是个JAVA辅助软件&#xff0c;它具备高度的安全性以及跨平台的特性&#xff0c;能让你的电脑或手机运行java程序&#xff0c;用户可使用Java(TM) 6 Update来搭建甚至运行整个ava程序&#xff0c;注意&#xff1a;卸载后JAVA环境的程序将无法运行。过去很可能会…

jep290涉及jdk版本_JDK 9 / JEP 280:字符串串联永远不会相同

jep290涉及jdk版本JEP 280 &#xff08;“ Indify String Concatenation”&#xff09;是与JDK 9一起实现的&#xff0c;根据其“摘要”部分&#xff0c;“更改了javac生成的静态String concatenation字节码序列&#xff0c;以使用对JDK库函数的invokedynamic调用。 ” 通过查看…

label标签/标记

label 标签用于指定表单项的文字描述信息&#xff0c;如下所示&#xff1a; <label for"username">用户名称&#xff1a;</label> <input id"username" name"username">label 标签 的 for 属性指定的值与 input 标签的 id 属…

矩阵累积相乘 java_累积:轻松自定义Java收集器

矩阵累积相乘 javaAccumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java Collector更加容易。 介绍 如果您曾经使用过Java Stream &#xff0c;那么很可能会使用了一些Collector &#xff0c;例如&#xff1a; C…

java socket 传输压缩文件_java基于socket传输zip文件功能示例

本文实例讲述了java基于socket传输zip文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;服务器端程序&#xff1a;import java.io.*;import java.net.*;import java.io.BufferedInputStream;public class SocketServer {ServerSocket ssnull;Socket snull;Dat…

css的学习

文章目录内联样式内部样式外部样式CSS语法格式选择器基本选择器ID 选择器元素选择器类选择器不带标签名带标签名通用选择器并集选择器选择器的优先级扩展选择器组合选择器属性选择器伪类选择器伪元素选择器css 是 Cascading Style Sheets&#xff0c;层叠样式表。 层叠含义是多…

java throws catch_java异常处理throws throw try-catch实例

java异常处理throws throw try-catch实例。throw用于方法中&#xff0c;我们可以预见的错误。比如&#xff1a;if(age<0){Exception e new Exception();//创建异常对象throw e;//抛出异常}在java代码中如果发生异常的话&#xff0c;jvm会抛出异常对象&#xff0c;导致程序代…

java 开发人员工具_每个Java开发人员都应该知道的10个基本工具

java 开发人员工具大家好&#xff0c;我们已经到了2019年的第二个月&#xff0c;我相信你们所有人都已经制定了关于2019年学习以及如何实现这些目标的目标。 我一直在撰写一系列文章&#xff0c;为您提供一些知识&#xff0c;使您可以学习和改进以成为2019年更好的全方位开发人…

SpringBoot2.x+mybatis plus3.x集成Activit7版本

文/朱季谦 在Activiti6版本当中&#xff0c;若要集成到Springboot里&#xff0c;需要写一些额外的配置类&#xff0c;我曾经在Activiti工作流框架学习笔记&#xff08;二&#xff09;之springboot2.0整合工作流Activiti6.0一文当中总结过相关配置过程&#xff0c;感兴趣的同学…

camel apache_Apache Camel 3的工作终于开始了

camel apache我们正在开始Apache Camel 3的工作。 我们正在多方面努力改善骆驼并引入新功能。 Guillaume Nodet实际上是在10月初开始了第一项工作&#xff0c;他通过清理代码库&#xff0c;删除不推荐使用的代码和组件&#xff0c;改进了路由引擎和核心中的其他内部组件开始了…

(前端开发)表格中的行全选、全不选、反选以及数据行背景色变换的示例代码

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格数据行全选/全不选/反选的示例</title><style>table {border: 1px solid;width: 500px;margin-left: 30%;}th, td {text-align: cente…

future java 多线程_Java多线程之Future与FutureTask

一&#xff1a;Future在使用实现Callable创建线程时&#xff0c;call()方法是有返回值的。那么&#xff0c;我们在编程时用什么来代表这个 线程执行后才能返回的未来结果 呢&#xff1f;那就是 Future类型。顾名思义&#xff0c;Future——未来值&#xff0c;我们用这个未来值来…