ssm 学习笔记day03

news2025/6/4 10:44:30

环境搭建 spring配置数据库

  • 1.在pom.xml安装相应的依赖
  • 在这里插入图片描述

在这里插入图片描述

  • 2.在properties里面配置数据库的相关信息,需要强调的一点是,一定不要在properties里面添加任何空格,否则就会像我一样搞了两小时,数据一直报错,然后发现是空格的问题。
    在这里插入图片描述

JdbCTemplate的查询操作

在这里插入图片描述


JdbcTemplate的插入操作

在这里插入图片描述
需要注意的是,一定把book(value1,value2,value3)写全,不然会报错
在这里插入图片描述
插入成功


JdbcTemplate的更新操作

类似于插入,直接用update去执行语法即刻
在这里插入图片描述
在这里插入图片描述


JdbcTemplate的删除操作

在这里插入图片描述

删除Id为1的图书
在这里插入图片描述


JdbcTemplate的复杂逻辑

编写Service接口
在这里插入图片描述
编写ServiceImpl接口
在这里插入图片描述
测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


使用事务

在主函数文件上方加一个@EnableTransactionManagement注解,表示开启事务管理
Spring03TxApplication.java

package com.atguigu.spring03tx;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement //开启事务管理
@SpringBootApplication
public class Spring03TxApplication {

    @Autowired
    JdbcTemplate jdbcTemplate;
    public static void main(String[] args) {
        SpringApplication.run(Spring03TxApplication.class, args);
    }

}

UserServiceImpl代码

package com.atguigu.spring03tx.service.impl;

import com.atguigu.spring03tx.Bean.Book;
import com.atguigu.spring03tx.dao.AccountDao;
import com.atguigu.spring03tx.dao.BookDao;
import com.atguigu.spring03tx.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;


@Service
public class UserServiceImpl implements UserService {
    @Autowired
    BookDao bookDao;

    @Autowired
    AccountDao accountDao;

    @Transactional //在这个地方加上Transactional注解
    @Override
    public void checkout(String username, Integer bookId, Integer buyNumber) {
        Book book = bookDao.getBookbyId(bookId);
        BigDecimal price = book.getPrice();
        BigDecimal total = price.multiply(new BigDecimal(buyNumber));
        accountDao.updateBalanceByUsername(username, total);
        bookDao.updateBookStock(bookId, buyNumber);
        int i = 1 / 0;
    }
}

可以发现Book和Account都没有执行代码,即出现了回滚操作。


事务的超时

service代码如下,在transaction中添加了timeout=3表示超过3s就报超时错误,然后在代码中出现了睡眠3s,所以会出现超时,不会对数据造成改变
在这里插入图片描述


rollbackFor

先编写一个找不到指定文件的IO异常
在这里插入图片描述
在这里插入图片描述
然后查看数据库,库存由97变为94,执行成功,没有回滚
在这里插入图片描述
原理如下:运行时回滚,编译时不会滚
在这里插入图片描述
rollbackFor可以指定哪些异常需要回滚,加上这句话就可以回滚了,norollbackFor同理
在这里插入图片描述


事务的隔离级别

三个可能出现的问题,首先了解以下事务是什么,类似于一个函数,里面有很多代码,使用代码的时候相当于事务的开始,代码结束的时候相当于事务的提交
在这里插入图片描述

脏读:脏读就是事务A在事务B未提交的时候,读了事务B修改的数据,但是事务B发生了回滚,事务A读取的数据就是脏数据。因为数据被污染了,所以称脏数据。解决措施:读已提交,因为根源是未提交会出现回滚。
在这里插入图片描述
不可重复读:一般来说发生在修改阶段,事务A之前读取过一个数据,但是中间事务B开始,修改该数据,直到结束(已提交),然后事务A再次读取数据的时候,和之前读取的数据不一样了。采取措施是对行数据上锁。
在这里插入图片描述
幻读,一般来说是表示事务A 按照一定条件进行数据读取, 期间事务B 插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时,发现了事务B 新插入的数据称为幻读。
解决措施:这个情况和可重复读类似,但是可重复读针对的是对行数据上锁。但是幻读发生在上,也就是说事务A和B对表的增删是不互斥的,所以事务B增删行之后,对事务A产生了幻读。所以采取的措施是对表上锁,表只能被一个事务执行,也就是最高级别序列化。


Propagation

传播行为
在 Spring 框架中,propagation(事务传播行为) 是事务管理的核心概念之一,用于定义当一个事务方法被另一个事务方法调用时,事务如何传播和处理。通过设置不同的传播行为,可以控制多个嵌套事务的边界和行为,确保数据一致性和业务逻辑正确性。
就是控制调用者和被调用者之间的关系,属性通常写在被调用者的函数上面。
被调用者
在这里插入图片描述

调用者
在这里插入图片描述
接下来是传播行为的几大类别
在这里插入图片描述
最常见的是REQUIRED,使用这个之后,被调用的事务就变为调用者事务的一部分,被调用者的属性全部失效。

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

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

相关文章

mkdir: cannot create directory ‘gitlab-stu’: No space left on device

Linux中创建目录时报错“mkdir: cannot create directory ‘gitlab-stu’: No space left on device”,磁盘空间不足。 使用df命令查看,发现 / 下面use%占满了: 查看inode使用情况: 可以看到docker的数据大部分存放在/var/lib/do…

ESP8285乐鑫SOCwifi芯片32bit MCU和2.4 GHz Wi-Fi

简介 ESP8285 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能,既能够独⽴应⽤,也可以作为从机搭载于其他主机 MCU 运⾏。当 ESP8285 独⽴应⽤时,能够直接从外接 flash 中启动。内置的⾼速缓冲存储器有利于提⾼系统性能,并且优化存储系统。…

DL00916-基于深度学习的金枪鱼各类别目标检测含完整数据集

文末有获取方式 🚀 基于深度学习的金枪鱼目标检测——开创智能识别新领域! 在计算机视觉和深度学习的快速发展中,目标检测 技术已成为提升行业效率的核心利器。而对于海洋生物领域,尤其是金枪鱼的 目标检测,更是填补了…

不可变集合类型转换异常

记录一个异常:class java.util.ImmutableCollections$ListN cannot be cast to class java.util.ArrayList (java.util.ImmutableCollections$ListN and java.util.ArrayList 文章目录 1、原因2、解决方式一3、解决方式二4、关于不可变集合的补充4.1 JDK8和9的对比4…

【PyQt5】从零开始的PyQt5 - QLabel篇

从零开始的PyQt5 - QLabel篇 引言一、简述二、例程2.1 显示到QWidget窗口上2.2 重新设置Label大小和对齐方式2.3 添加内容,设置边框2.4 显示富文本 三、参考 引言 QLabel主要用于显示文本或图像,不提供用户交互功能。本文主要简述PyQt5中的QLabel以及展…

多模态AI的企业应用场景:视觉+语言模型的商业价值挖掘

关键词:多模态AI | 视觉语言模型 | 企业应用 | 商业价值 | 人工智能 📚 文章目录 一、引言:多模态AI时代的到来二、多模态AI技术架构深度解析三、客服场景:智能化服务体验革命四、营销场景:精准投放与创意生成五、研…

数据结构(7)树-二叉树-堆

一、树 1.树的概述 现实生活中可以说处处有树。 在计算机里,有一种数据结构就是像现实中的树一样,有根,有分支,有叶子;一大片树就叫做森林。 这些性质抽象到计算机里也叫树,大致长这个样子: …

怎么快速判断一款MCU能否跑RTOS系统

最近有朋友在后台中私信我,说现在做项目的时候有时候总是会考虑要不要用RTOS,或者怎么考量什么时候该用RTOS比较好、 关于这个问题,我个人也是深有感触的,做开发这么久了,大大小小的产品都做过不少了。有用RTOS开发的…

使用原生前端技术封装一个组件

封装导航栏 navbar-template.html <header><nav><ul><li><a href"index.html"><i class"fas fa-home"></i> 主页</a></li><li><a href"#"><i class"fas fa-theate…

lesson04-简单回归案例实战(理论+代码)

理解线性回归及梯度下降优化 引言 在机器学习的基础课程中&#xff0c;我们经常遇到的一个重要概念就是线性回归。今天&#xff0c;我们将深入探讨这一主题&#xff0c;并通过具体的例子来了解如何利用梯度下降方法对模型进行优化。 线性回归简介 线性回归是一种统计方法&a…

Java 面试中的数据库设计深度解析

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Java 面试中的数据库设计深度解析一、数据库…

国内首发!具有GPU算力的AI扫描仪

奥普思凯重磅推出的具有GPU算力的扫描仪&#xff0c;是一款真正意义上的AI扫描仪&#xff0c;奥普思凯将嵌有OCR发票识别核心的高性能NPU算力棒与高速扫描仪相结合&#xff0c;实现软件硬件相结合&#xff0c;采用一体化外观设计&#xff0c;实现高速扫描、快速识别表单&#x…

【开发技巧指北】IDEA修改默认绑定Maven的仓库地址

【开发技巧指北】IDEA修改默认绑定Maven的仓库地址 Microsoft Windows 11 家庭中文版 IIntelliJ IDEA 2025.1.1.1 默认的IDEA是有自己捆绑的Maven的&#xff08;这是修改完毕的截图&#xff09; 修改默认的Maven配置&#xff0c;路径是IDEA安装路径下的plugins D:\Softwares\I…

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案

【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案 目录 【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案**系统概述** **核心功能模块详解****1. 系统登录与权限控制****2. 借阅管理模块****3. 用户角色管理…

springcloud openfeign 请求报错 java.net.UnknownHostException:

现象 背景 项目内部服务之间使用openfeign通过eureka注册中心进行服务间调用&#xff0c;与外部通过http直接调用。外部调用某个业务方提供的接口需要证书校验&#xff0c;因对方未提供证书故设置了忽略证书校验代码如下 Configuration public class IgnoreHttpsSSLClient {B…

【harbor】--配置https

使用自建的 CA 证书来自签署和启用 HTTPS 通信。 &#xff08;1&#xff09;生成 CA认证 使用 OpenSSL 生成一个 2048位的私钥这是 自建 CA&#xff08;证书颁发机构&#xff09; 的私钥&#xff0c;后续会用它来签发证书。 # 1创建CA认证 cd 到harbor [rootlocalhost harbo…

OptiStruct实例:消声器前盖ERP分析(2)RADSND基础理论

13.2 Radiated Sound Output Analysis( RADSND ) RADSND 方法通过瑞利积分来求解结构对外的辐射噪声。其基本思路是分为两个阶段&#xff0c;如图 13-12 所示。 图13-12 结构辐射噪声计算示意图 第一阶段采用有限元方法&#xff0c;通过频响分析(模态叠加法、直接法)工况计算结…

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …

3.RV1126-OPENCV 图像叠加

一.功能介绍 图像叠加&#xff1a;就是在一张图片上放上自己想要的图片&#xff0c;如LOGO&#xff0c;时间等。有点像之前提到的OSD原理一样。例如&#xff1a;下图一张图片&#xff0c;在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…

使用 HTML + JavaScript 实现一个日历任务管理系统

在现代快节奏的生活中&#xff0c;有效的时间管理变得越来越重要。本项目是一个基于 HTML 和 JavaScript 开发的日历任务管理系统&#xff0c;旨在为用户提供一个直观、便捷的时间管理工具。系统不仅能够清晰地展示当月日期&#xff0c;还支持事件的添加、编辑和删除操作&#…