Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )

目录

    • JdbcTemplate
      • JdbcTemplate(概念和准备)
      • JdbcTemplate 操作数据库(新增update)
      • JdbcTemplate 操作数据库(修改和删除update)
      • JdbcTemplate 操作数据库(查询返回某个值queryForObject)
      • JdbcTemplate 操作数据库(查询返回对象queryForObject)
      • JdbcTemplate 操作数据库(查询返回集合query)
      • JdbcTemplate 操作数据库(批量操作batchUpdate)
      • 感谢阅读

开篇:
欢迎再次来到 Spring 5 学习系列!在这个博客中,我们将深入研究 Spring 框架的JdbcTemplate+概念配置+增删改查数据+批量操作 。

JdbcTemplate

JdbcTemplate(概念和准备)

  1. Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作

  2. 准备工作

  • 引入相关jar包
    在这里插入图片描述

  • 在 spring 配置文件配置数据库连接池

<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><property name="url" value="jdbc:mysql:///user_db" /><property name="username" value="root" /><property name="password" value="root" /><property name="driverClassName" value="com.mysql.jdbc.Driver" />
</bean>
  • 配置 JdbcTemplate 对象,注入 DataSource
<!-- JdbcTemplate 对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><!--注入 dataSource--><property name="dataSource" ref="dataSource"></property>
</bean>
  • 创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象

*配置文件

<context:component-scan base-package="com.atguigu"></context:component-scan>

Service类

@Service
public class BookService {//注入 dao@Autowiredprivate BookDao bookDao;
}

Dao类

@Repository
public class BookDaoImpl implements BookDao {//注入 JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;
}

JdbcTemplate 操作数据库(新增update)

  1. 创建对应数据库创建实体类
public class User{private String userId;private String username;private String ustatus;// ...get/set}
  1. 编写service和dao

(1)在 dao 进行数据库添加操作

(2)调用 JdbcTemplate 对象里面 update 方法实现添加操作

有两个参数

⚫ 第一个参数:sql 语句

⚫ 第二个参数:可变参数,设置 sql 语句值

@Repository
public class BookDaoImpl implements BookDao {//注入 JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic void add(Book book) {//1 创建 sql 语句String sql = "insert into t_book values(?,?,?)";//2 调用方法实现Object[] args = {book.getUserId(), book.getUsername(), 
book.getUstatus()};int update = jdbcTemplate.update(sql,args);System.out.println(update);}
}
  1. 测试类
@Test
public void testJdbcTemplate() {ApplicationContext context =new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService", 
BookService.class);Book book = new Book();book.setUserId("1");book.setUsername("java");book.setUstatus("a");bookService.addBook(book);
}

JdbcTemplate 操作数据库(修改和删除update)

1、修改
@Override
public void updateBook(Book book) {String sql = "update t_book set username=?,ustatus=? where user_id=?";Object[] args = {book.getUsername(), book.getUstatus(),book.getUserId()};int update = jdbcTemplate.update(sql, args);System.out.println(update);
}
2、删除
@Override
public void delete(String id) {String sql = "delete from t_book where user_id=?";int update = jdbcTemplate.update(sql, id);System.out.println(update);
}

JdbcTemplate 操作数据库(查询返回某个值queryForObject)

  1. 查询表里面有多少条记录,返回是某个值

  2. 使用 JdbcTemplate实现查询返回某个值代码

有两个参数

⚫ 第一个参数:sql 语句

⚫ 第二个参数:返回类型 Class

//查询表记录数
@Override
public int selectCount() {String sql = "select count(*) from t_book";Integer count = jdbcTemplate.queryForObject(sql, Integer.class);return count;
}

JdbcTemplate 操作数据库(查询返回对象queryForObject)

  1. 场景:查询图书详情

  2. JdbcTemplate 实现查询返回对象

有三个参数

⚫ 第一个参数:sql 语句

⚫ 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成

数据封装

⚫ 第三个参数:sql 语句值

@Override
public Book findBookInfo(String id) {String sql = "select * from t_book where user_id=?";//调用方法Book book = jdbcTemplate.queryForObject(sql, new 
BeanPropertyRowMapper<Book>(Book.class), id);return book;
}

JdbcTemplate 操作数据库(查询返回集合query)

  1. 场景:查询图书列表分页

  2. 调用 JdbcTemplate方法实现查询返回集合

有三个参数

⚫ 第一个参数:sql 语句

⚫ 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成

数据封装

⚫ 第三个参数:sql 语句值

//查询返回集合
@Override
public List<Book> findAllBook() {String sql = "select * from t_book";//调用方法List<Book> bookList = jdbcTemplate.query(sql, new 
BeanPropertyRowMapper<Book>(Book.class));return bookList;
}

JdbcTemplate 操作数据库(批量操作batchUpdate)

  1. 批量操作:操作表里面多条记录

  2. JdbcTemplate 实现批量添加操作

有两个参数

⚫ 第一个参数:sql 语句

⚫ 第二个参数:List 集合,添加多条记录数据

//批量添加
@Override
public void batchAddBook(List<Object[]> batchArgs) {String sql = "insert into t_book values(?,?,?)";int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(Arrays.toString(ints));
}
//批量添加测试
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"3","java","a"};
Object[] o2 = {"4","c++","b"};
Object[] o3 = {"5","MySQL","c"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
//调用批量添加
bookService.batchAdd(batchArgs);
  1. JdbcTemplate 实现批量修改操作
//批量修改
@Override
public void batchUpdateBook(List<Object[]> batchArgs) {String sql = "update t_book set username=?,ustatus=? where user_id=?";int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(Arrays.toString(ints));
}
//批量修改
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"java0909","a3","3"};
Object[] o2 = {"c++1010","b4","4"};
Object[] o3 = {"MySQL1111","c5","5"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
//调用方法实现批量修改
bookService.batchUpdate(batchArgs);
  1. JdbcTemplate 实现批量删除操作
//批量删除
@Override
public void batchDeleteBook(List<Object[]> batchArgs) {String sql = "delete from t_book where user_id=?";int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(Arrays.toString(ints));
}
//批量删除
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"3"};
Object[] o2 = {"4"};
batchArgs.add(o1);
batchArgs.add(o2);
//调用方法实现批量删除
bookService.batchDelete(batchArgs);

感谢阅读

感谢您阅读 Spring 5 学习系列的第四篇!在这篇文章中,我们探索了Spring5的(JdbcTemplate+概念配置+增删改查数据+批量操作 )

下一篇文章即将发布! 在第五篇中,我们将深入研究Spring 5的事务,为您分享我学习的Spring5的收获,请继续关注我的系列。

谢谢您的陪伴! 如果您有任何问题、建议或想要了解的特定主题,请随时在评论中告诉我们。我们期待与您共同探索Spring 5,共同提升我们的Java开发技能!

敬请期待第五篇的发布,我们将很快与您再次见面!

学习视频来源尚硅谷Spring5

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

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

相关文章

shopee的AI学习之路——GPTs通过AdInteli 广告变现

GPTs|AdInteli 广告变现 一、什么是 AdInteli AdIntelli 是一个旨在为生成 GPTs 接入广告并实现变现的平台。它连接了全球最大的广告联盟&#xff0c;允许广告商进行竞价&#xff0c;确保展示最有价值的广告。AdIntelli 采用 AI 驱动的收入生成技术&#xff0c;优化广告选择。…

《游戏-03_3D-开发》之—新输入系统人物移动攻击连击

本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;请先保存项目&#xff0c; 点击加号起名为MyCtrl&#xff0c; 点击加号设置为一轴的&#xff0c; 继续设置W键&#xff0c; 保存 生成自动脚本&#xff0c; 修改MyPlayer代码&#xff1a; using UnityEngine;…

华为产业链之车载激光雷达

一、智能汽车 NOA 加快普及&#xff0c;L3 上路利好智能感知硬件 1、感知层是 ADAS 最重要的一环 先进驾驶辅助系统 &#xff08;ADAS&#xff0c; Advanced driver-assistance system&#xff09;分“感知层、决策层、执行层”三个层级&#xff0c;其中感知层是最重要的一环…

vue创建前端项目

背景 项目中需要用到前端技术&#xff0c;通过技术调研和团队分析&#xff0c;则采用vue作为前端主要技术栈。 问题 安装好后vue&#xff0c;按理说就可以创建vue项目 vue init webpack 项目名称 npm install&#xff0c;使用vue-cli脚手架搭建项目卡在sill idealTree buil…

C#hybridCLR热更新方案初探

前言 暂时处于初步研究状态&#xff0c;目前的框架使用还是尚少&#xff0c;本篇文章旨在同步给大家大概的使用流程和使用心得&#xff0c;在初步建立新项目时可以适当考虑。 介绍 热更新 与强制更新相对应&#xff0c;移动平台上App的可执行程序没有发生变化&#xff0c;仅…

[Go]认识Beego框架

对比Gin的简洁&#xff0c;自己之前基于Gin撸了一个架子&#xff0c;确实比beego目录看着舒服多了&#xff0c;不过最近接触到beego的项目&#xff0c;beego的bee工具使用还是很方便&#xff0c;来简单梳理下细节&#xff1b; Beego是一个开源的Go语言Web应用框架&#xff0c;…

摄像机视角的切换_unity基础开发教程

摄像机视角的切换 前言一、场景搭建二、脚本编辑三、脚本挂载四、运行效果结语 前言 我们在游戏中经常可以看到游戏视角的切换&#xff0c;今天我们就做一个视角切换的小demo&#xff0c;学会之后可以将其融入到自己的游戏制作当中。 话不多说&#xff0c;我们现在开始&#xf…

eNSP学习——理解交换机Hybird接口的应用

目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址 实验步骤 基本配置&#xff08;此处仅以PC1为例&#xff09; 实现组内通信、组间间隔 实现网络管理员对所有网络的访问 原理概述 Hybrid接口既可以连接普通终端的接入链路又可以连接交换机间的干道…

Word中插入公式并引用

1、如何插入公式 在word中,键入快捷键 “alt” + “=”,即可快速插入一个公式,并立即编辑。 2、利用表格框住公式 新建一个 1 行 3 列的表格,总宽度为页面宽度,第一个单元格和最后一个单元格都保持在 2.25cm,中间尽可能长。我设置的这个数值比较合理。 记住,要把表格…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(4)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

使用Linux SDK客户端向AWS Iot发送数据

参考链接&#xff1a; https://ap-southeast-1.console.aws.amazon.com/iot/home?regionap-southeast-1#/test 此篇文章用于测试&#xff0c;使用Linux SDK客户端向AWS Iot发送数据&#xff0c;准备环境如下&#xff1a; 1、客户端环境准备 1.1 客户端操作系统 虚拟机一台…

ifconfig 主机ip url记录

ifconfig 容器Pods相关主机与url信息 一文搞懂网络知识&#xff0c;IP、子网掩码、网关、DNS、端口号_关于ip,网关。端口-CSDN博客 计算机网络知识之URL、IP、子网掩码、端口号_ip地址和url-CSDN博客 阅读看下以上文章 由此可知 1.主机ip 10.129.22.124 10.129.22 是网段…

【AIGC】Diffusers:扩散模型的开发手册说明1

主要组件 最先进的扩散管道 diffusion pipelines&#xff0c;只需几行代码即可进行推理。可交替使用的各种噪声调度器 noise schedulers&#xff0c;用于平衡生成速度和质量。预训练模型 models&#xff0c;可作为构建模块&#xff0c;并与调度程序结合使用&#xff0c;来创建…

通过Android Logcat分析firebase崩溃

参考&#xff1a;UnityIL2CPP包Crash闪退利用Android Logcat还原符号表堆栈日志 - 简书 一、安装Android Logcat插件 1、新建空白unity工程&#xff0c;打开PackageManager窗口&#xff0c;菜单栏Window/PackageManager 2、PackageManager中安装Android Logcat日志工具 3、安…

谷歌邮箱即将推出“助我撰写”人工智能语音功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

小程序样例3:根据日历创建待办事项

基本功能 1、待办事项查看 选择不同的日期显示不同的待办: 2、选择日期后 新增事项&#xff1a; 3. 点击事项&#xff0c;查看详情 4、删除事项&#xff1a;删除事项3之后&#xff0c;剩余事项2 5、点击日期可以选择更多的月&#xff1a; 实现思路&#xff1a; 1、数据结构&a…

【并发】什么是 AQS

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 AQS的主要特征和方法包括&#xff1a; 状态管理&#xff1a; 等待队列&#xff1a; 独占模式&#xff1a; 共享模式&#xff1…

微服务理解篇

一 :架构演变 1 单体架构: 简单理解为一个服务涵盖所有需求功能2 垂直架构: 按照业务功能将单体架构拆分成小模块服务, 如:订单系统,用户系统,商品系统 ##缺点 引入分布式事务,分布式锁等,优点:模块解耦## 垂直拆分:根据业务层级拆分,比如商城的订单系统,用户系统,商品系统…

Leetcode—2696. 删除子串后的字符串最小长度【简单】

2023每日刷题&#xff08;八十八&#xff09; Leetcode—2696. 删除子串后的字符串最小长度 实现代码 class Solution { public:int minLength(string s) {string sub " ";for(auto c: s) {if((c B && sub.back() A) || (c D && sub.back() C…

BACnet转OPC UA网关BA112

随着通讯技术和控制技术的发展&#xff0c;为了实现楼宇的高效、智能化管理&#xff0c;集中监控管理已成为楼宇智能管理发展的必然趋势。在此背景下&#xff0c;高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于楼宇自控和暖通空调系统应用中…