04--JdbcTemplate模版

1、JdbcTemplate模版

1.1 概述

Spring JDBC

Spring框架对JDBC的简单封装。提供了一个JdbcTemplate对象简化JDBC的开发(后面专门讲spring框架)

1.2 实现步骤

1. 导入jar包 4 + 1

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

JdbcTemplate template = new JdbcTemplate(ds);

3. 调用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.3 快速入门

package com.suyv.template;import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.suyv.druid.DruidDemo01;
import com.suyv.pojo.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;
import java.io.IOException;
import java.util.List;
import java.util.Properties;/*** @Author: 憨憨浩浩* @CreateTime: 2024-01-11 14:17* @Description: JdbcTemplate 的初使用*/
public class JdbcTemplateDemo01 {public static void main(String[] args) throws Exception {// 1.导入jar包// 使用Druid连接池Properties properties = new Properties();properties.load(JdbcTemplateDemo01.class.getClassLoader().getResourceAsStream("druid.properties"));DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);// 2.创建JdbcTemplate对象JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);// 3.调用方法String sql = "select * from user";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));for (User user : users) {System.out.println(user);}}
}

1.4 增删改的测试

工具类的准备:

package com.suyv.util;import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.suyv.template.JdbcTemplateDemo01;import javax.sql.DataSource;
import java.util.Properties;/*** @Author: 憨憨浩浩* @CreateTime: 2024-01-11 15:31* @Description: 获取Druid连接池*/
public class JdbcUtil {public static DataSource getDataSource(){// 使用Druid连接池Properties properties = new Properties();DataSource dataSource = null;try {properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties"));dataSource = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {throw new RuntimeException(e);} finally {return dataSource;}}
}

增删改测试:

package com.suyv.update;import com.suyv.util.JdbcUtil;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;/*** @Author: 憨憨浩浩* @CreateTime: 2024-01-11 15:35* @Description: JdbcTemplate的update()的使用*/
public class TemplateUpdate01 {// 添加用户@Testpublic void addUser(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "insert into user values(null,?,?)";int num = jdbcTemplate.update(sql, "懒羊羊", "123456");if (num > 0){System.out.println("添加成功");} else {System.out.println("添加失败");}}// 修改用户信息@Testpublic void updateUser(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "update user set password = ? where username = ?";int num = jdbcTemplate.update(sql, "admin", "懒羊羊");if (num > 0){System.out.println("修改成功");} else {System.out.println("修改失败");}}// 删除用户@Testpublic void deleteUser(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "delete from user where id = ?";int num = jdbcTemplate.update(sql, 1);if (num > 0){System.out.println("删除成功");} else {System.out.println("删除失败");}}}

1.5 查询的测试

工具类准备:

package com.suyv.util;import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.suyv.template.JdbcTemplateDemo01;import javax.sql.DataSource;
import java.util.Properties;/*** @Author: 憨憨浩浩* @CreateTime: 2024-01-11 15:31* @Description: 获取Druid连接池*/
public class JdbcUtil {public static DataSource getDataSource(){// 使用Druid连接池Properties properties = new Properties();DataSource dataSource = null;try {properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties"));dataSource = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {throw new RuntimeException(e);} finally {return dataSource;}}
}

1.5.1 查询单行数据

package com.suyv.query;import com.suyv.pojo.User;
import com.suyv.util.JdbcUtil;
import org.junit.Test;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.Map;/*** @Author: 憨憨浩浩* @CreateTime: 2024-01-11 15:45* @Description: 查询单行数据*/
public class TemplateQuery01 {// queryforMap()的使用@Testpublic void Test01(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id = ?";Map<String, Object> map = jdbcTemplate.queryForMap(sql,6);System.out.println(map);}// queryforObject()的使用@Testpublic void Test02(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id = ?";User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 6);System.out.println(user);}// queryforObject()的使用--返回查询条数@Testpublic void Test03(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select count(*) from user";int num = jdbcTemplate.queryForObject(sql,Integer.class);System.out.println(num);}// queryforObject()的使用--异常情况// 查询不到数据会发生异常@Testpublic void Test04(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id = ?";User user = null;try {user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 8);} catch (DataAccessException e) {System.out.println("暂未该学号的学生");} finally {if (user != null){System.out.println(user);}}}
}

1.5.2 查询多行数据

package com.suyv.query;import com.suyv.pojo.User;
import com.suyv.util.JdbcUtil;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.List;
import java.util.Map;/*** @Author: 憨憨浩浩* @CreateTime: 2024-01-11 15:57* @Description: 查询多行数据*/
public class TemplateQuery02 {// queryforList()的使用@Testpublic void Test01(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user";List<Map<String, Object>> lists = jdbcTemplate.queryForList(sql);for (Map<String, Object> map : lists) {System.out.println(map);}}// queryforList()的使用@Testpublic void Test02(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id > ?";List<Map<String, Object>> lists = jdbcTemplate.queryForList(sql,5);for (Map<String, Object> map : lists) {System.out.println(map);}}// query()的使用@Testpublic void Test03(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));for (User user : users) {System.out.println(user);}}// query()的使用@Testpublic void Test04(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id > ?";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),5);for (User user : users) {System.out.println(user);}}}

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

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

相关文章

【论文阅读 SIGMOD18】Query-based Workload Forecasting for Self-Driving

Query-based Workload Forecasting for Self-Driving Database Management Systems My Summary ABSTRACT Autonomous DBMS的第一步就是能够建模并预测工作负载&#xff0c;以前的预测技术对查询的资源利用率进行建模。然而&#xff0c;当数据库的物理设计和硬件资源发生变化…

Windows如何部署TortoiseSVN客户端

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

Spring第六天(注解开发第三方Bean)

注解开发管理第三方Bean 显然&#xff0c;我们无法在第三方Bean中写入诸如service这样的注解&#xff0c;所以&#xff0c;Spring为我们提供了Bean这一注解来让我们通过注解管理第三方Bean 第二种导入方式由于可读性太低&#xff0c;故只介绍第一种导入方式&#xff0c;这里我…

自动化工具实践操作-注入自定义代码

功能 采集掘金左边每个tab下文章的标题。人为操作就是点击一个tab&#xff0c;复制文字标题&#xff0c;重复以上操作。根据这个&#xff0c;我们可以转换成自己的代码 开始设计 如上文操作基本一致。新建任务、设计点击事件如出一辙。 自定义循环事件 操作循环节点&#…

R语言【cli】——ansi_has_any():检查字符串里是否存在ANSI格式

Package cli version 3.6.0 Usage ansi_has_any(string, sgr TRUE, csi TRUE, link TRUE) Arguments 参数【string】&#xff1a;要检查的字符串。它也可以是字符向量 参数【sgr】&#xff1a;是否查找SGR(样式化)控制序列。 参数【csi】&#xff1a;是否查找非sgr控制序…

ubuntu下常见查看库信息的指令

要查看共享库&#xff08;例如 liblog4cplus.so&#xff09;的信息&#xff0c;可以使用一些工具来获取有关库的详细信息。以下是一些常用的方法&#xff1a; 1. 使用 nm 命令&#xff1a; nm 命令用于显示目标文件或共享库的符号表。你可以运行以下命令查看 liblog4cplus.so…

Mysql:重点且常用的操作和理论知识整理 ^_^

目录 1 基础的命令操作 2 DDL 数据库定义语言 2.1 数据库操作 2.2 数据表操作 2.2.1 创建数据表 2.2.2 修改和删除数据表 2.2.3 添加外键 3 DML 数据库操作语言 3.1 插入语句(INSERT) 3.2 修改语句(UPDATE) 3.3 删除语句 3.3.1 DELETE命令 3.3.2 TRUNCATE命令 4 …

第1周:Day 3 - PyTorch与TensorFlow的异同介绍(入门级)

第1周&#xff1a;Day 3 - PyTorch介绍 学习目标 理解PyTorch的基本概念和主要特点。 成功安装PyTorch环境。 PyTorch简介 PyTorch 是一个开源的机器学习库&#xff0c;广泛用于计算机视觉和自然语言处理等领域。 它由Facebook的人工智能研究团队开发&#xff0c;提供了丰富的A…

idea中使用git提交代码报 Nothing To commit No changes detected

问题描述 在idea中右键&#xff0c;开始将变更的代码进行提交的时候&#xff0c;【Commit Directory】点击提交的时候 报 Nothing To commit No changes detected解决方案 在这里点击Test 看看是不是能下面显示git版本&#xff0c;不行的话 会显示一个 fix的字样&#xff0c;行…

【日常聊聊】边缘计算的挑战和机遇

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 边缘计算的挑战和机遇 一&#xff1a;数据安全与隐私保护 二&#xff1a;网络稳定性与可靠性 三&#xff1a;实时性与性能优…

Unity中的协程

定义&#xff1a;协程使得任务的执行可以分配到多个帧中完成&#xff0c;在Unity中&#xff0c;协程从开始执行到第一个yield return 语句后将调用权归还Unity主线程&#xff0c;并在紧随的下一帧继续从上次结束调用的代码上下文位置恢复执行。 常见应用场景&#xff1a;HTTP请…

【Vue】属性计算 computed

<script setup>import { ref,computed} from vue let hbs ref([]); //装爱好的值const publishHbsMessagecomputed(()>{return hbs.value.length>0?Yes:No}) </script><template><div>吃 <input type"checkbox" name"hbs&qu…

C++入门学习(八)sizeof关键字

sizeof 是 C 和 C 中的一个运算符&#xff0c;用于确定特定类型或对象的内存大小&#xff08;以字节为单位&#xff09;。 1、查看数据类型占据内存大小 #include <iostream> using namespace std; int main() {short a 1;int b 1;long c 1;long long d 1;cout<…

Ubuntu使用docker-compose安装chatGPT

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十五&#xff09;——使用docker-compose安装chatGPT Welcome to the AI era! 使用docker compose安装 在/usr/local文件夹下创建chatgpt mkdir chatgpt创建docker-compose.yaml vim docker-compos…

代码随想录算法训练营Day32|122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

目录 122.买卖股票的最佳时机 II 前言 思路 算法实现 55. 跳跃游戏 思路 算法实现 45.跳跃游戏 II 前言 思路 算法实现 总结 122.买卖股票的最佳时机 II 题目链接 文章链接 前言 本题要求只能持有一支股票&#xff0c;根据每日股票的价格控制股票的买入和卖出获取最…

6. UE5 RPG AttributeSet的设置

AttributeSet 负责定义和持有属性并且管理属性的变化。开发者可以子类化UAttributeSet。在OwnerActor的构造方法中创建的AttributeSet将会自动注册到ASC。这一步必须在C中完成。 Attributes 是由 FGameplayAttributeData定义的浮点值。 Attributes能够表达从角色的生命值到角色…

文件扫码下载的方法?轻松制作文件活码的技巧

现在多文件生成二维码的需求不断的增多&#xff0c;为什么大家都开始选择这种方式来展示文件呢&#xff1f;一方面是将文件储存在云端&#xff0c;避免有时间限制的问题&#xff0c;随时查看文件&#xff1b;二是可以让其他人同时扫描二维码查看内容&#xff0c;当需要分享给很…

Vue四个阶段,八个钩子函数

- 创造阶段&#xff1a;创建Vue实例和初始化数据事件&#xff0c;数据代理&#xff0c;监测watch - beforeCreate&#xff0c;只是创建实例&#xff0c;不能this.$el,this.msg,this.方法名&#xff08;&#xff09; - created&#xff0c;数据代理了&#xff0c;能v…

内网部署,移动端如何使用,且保障电脑端安全

A. 在企业内网自建DNS服务&#xff0c;然后使用域名代替公网IP重新配置&#xff1b; B. 在互联网区域&#xff0c;使用互联网DNS服务将域名解析到公网IP&#xff1b; C. 在内网区域&#xff0c;使用自建DNS服务将域名解析到服务器内网IP&#xff0c;这样内网电脑不能联网也能正…

【ChatGPT】利用ChatGPT将图片转换成JSON文件

前言 我在创建自己的GPT时,通常会上传一些JSON文件作为知识库,我还制作了一些脚本工具,将PDF文件转换成JSON文件。但是在这个过程中产生一个问题,PDF文件中会有一些图表,JSON文件就不能存储和表达这些图表的内容了。那该怎么办呢?这里跟大家介绍一个方法,可以有效地将图…