Java课题笔记~ Spring事务的程序举例环境搭建

news2024/10/7 10:24:43

  举例:购买商品 trans_sale 项目

 

本例要实现购买商品,模拟用户下订单,向订单表添加销售记录,从商品表减少库存。

实现步骤:

Step0:创建数据库表

创建两个数据库表 sale , goods

sale 销售表:

 goods 商品表:

 goods 表数据:

 Step1: maven 依赖 pom.xml

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.26</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.3.26</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.26</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.8</version>
    </dependency>
</dependencies>	
 <!--插件:-->
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Step2:创建实体类

创建实体类 Sale 与 Goods

 Step3:定义 dao 接口

定义两个 dao 的接口 SaleDao , GoodsDao

SaleDao :

  GoodsDao :

Step4:定义 dao 接口对应的 sql 映射文件

SaleDao.xml

 

 GoodsDao.xml

 

Step5:定义异常类

定义 service 层可能会抛出的异常类 NotEnoughException

 

Step6:定义 Service 接口

定义 Service 接口 BuyGoodsService

 

Step7:定义 service 的实现类

定义 service 层接口的实现类 BuyGoodsServiceImpl

1)类定义

 

2)Dao 属性

 

3)Buy 方法

 

 

Step8:修改 Spring 配置文件内容

声明Mybatis 对象

  声明业务层对象

 

Step9:定义测试类

定义测试类 MyTest。现在就可以在无事务代理的情况下运行了

 

运行程序并查看数据库:

 测试代码可有三种类型:

① 正常购买【id和amount匹配】

② 无此商品【没有库里面的id】

③ 库存不足【amount大于原有的amount】

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

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

相关文章

2021年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 下列哪个操作不能退出IDLE环境&#xff1f; A&#xff1a;AltF4 B&#xff1a;CtrlQ C&#xff1a;按ESC键 D&#xff1a;exit() 正确的答案是&#xff1a;B&#xff1a;CtrlQ 解…

LM2596S-adj电源芯片应用电路

手边有两块降压电源模块&#xff0c;使用芯片为LM2596S-adj&#xff0c;手册中给的使用电路为&#xff1a; 市面上买到的模块为&#xff1a; 电路为&#xff1a; 对比后发现苏守坤博客中存在错误&#xff0c;原博客中实物图应为输出可调的电源模块&#xff0c;博主所画原理…

深入理解PyTorch中的NoamOpt优化器

深入理解PyTorch中的NoamOpt优化器 作者&#xff1a;安静到无声 个人主页 今天&#xff0c;我们将深入探讨一个在自然语言处理领域广泛使用的优化器——NoamOpt。这个优化器是基于PyTorch实现的&#xff0c;并且在"Attention is All You Need"这篇论文中首次提出。…

若依后台管理系统06

哈喽&#xff01;大家好&#xff0c;我是旷世奇才李先生 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff0c;回复【项目】获取我为大家准备的项目 最近打算把我手里之前做的项目分享给大家&#…

Rivian:一家已经在全球电动汽车领域站稳脚跟的热门电动汽车公司

来源&#xff1a;猛兽财经 作者 &#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Rivian&#xff08;RIVN&#xff09;是全球电动汽车市场的主要参与者&#xff0c;由于全球电动汽车市场的不断增长和亚马逊&#xff08;AMZN&#xff09;的持续支持&#xf…

Blob的一些使用 - 下载、图片预览、切片上传

Blob Blob: 前端专门用于支持文件操作的二进制对象 File: 一种特殊的Blob对象 文件下载 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

Qt应用开发(基础篇)——信号槽 Signals and Slots

一、前言 Qt成为我们今天拥有的灵活而舒适的工具&#xff0c;除了友好和能够快速开发设计师界面&#xff0c;信号槽机制是最大的核心特征&#xff0c;也是区别于其他开发框架最大的优势。 Qt的信号槽作用于两个对象之间的通信。当一个对象发生了改变&#xff0c;它希望其他关心…

Windows下安装 Redis

目录 1.下载 1.1.Redis官网 1.2.github下载地址 2.安装步骤 2.1.解压Redis压缩包 2.2.创建临时服务 2.3.启动客户端 2.4.注册Redis服务 3.总结 4.致谢 1.下载 1.1.Redis官网 Download | Redis Redis 官方网站没有提供 Windows 版的安装包&#xff0c;但可以通过…

Django实现音乐网站 ⑻

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对单曲原有功能的基础上进行部分功能实现和显示优化。 目录 新增编辑 歌手下拉显示修改 设置歌曲时长 安装eyed3库 获取mp3时长 歌曲时长字段修改 重写save方法 增加歌手单曲数量 查询歌手单曲数量 …

算法通关村——二分查找在拓展中的应用

1. 山脉数组的峰顶索引 山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3 存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] < arr[1] < … arr[i-1] < arr[i] arr[i] > arr[i1] >…

企业计算机被_locked勒索病毒攻击如何处理及后期如何做好预防工作

随着信息技术的普及和不断发展&#xff0c;勒索病毒攻击已成为企业面临的一项严峻挑战。近期&#xff0c;山西某医药公司的计算机服务器被_locked勒索病毒攻击&#xff0c;导致企业的许多重要数据被加密&#xff0c;当发现企业的服务器被该勒索病毒攻击时&#xff0c;该企业的做…

初识mysql数据库之引入mysql客户端库

目录 一、下载第三方库 1. 准备工作 1. 使用mysql官网提供的库 2. yum源安装 二、测试第三方库是否可用 三、mysql常用接口介绍 1. 查看官方文档 2. 初始化 3. 关闭mysql 4. 连接mysql 5. 下达sql指令 四、一个简单的C客户端库连接mysql程序 1. 头文件 2. 初始化…

maven 删除下载失败的包

本文介绍了当Maven包报红时&#xff0c;使用删除相关文件的方法来解决该问题。文章详细说明了_remote.repositories、.lastUpdated和_maven.repositories文件的作用&#xff0c;以及如何使用命令行删除这些文件。这些方法可以帮助开发者解决Maven包报红的问题&#xff0c;确保项…

赛码网-圈地运动 100%AC代码(C)

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在准备秋招&#xff0c;一直在练习编程。 ⏩本篇文章对赛码网的圈地运动 题目做一…

LeetCode 热题 100 JavaScript -- 74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …

迁移协调器:方法和模式

Migration Coordinator &#xff08;迁移协调器&#xff09;是一款完全免费的工具&#xff0c;内置于 NSX Data Center 中&#xff0c;可帮助将NSX for vSphere迁移到 NSX&#xff08;又名 NSX-T&#xff09;。Migration Coordinator最初是在 NSX-T 2.4 中引入的&#xff0c;有…

在外SSH远程连接Ubuntu系统

在外SSH远程连接Ubuntu系统【无公网IP】 文章目录 在外SSH远程连接Ubuntu系统【无公网IP】前言1. 在Ubuntu系统下安装cpolar软件2. 完成安装后打开cpolar客户端web—UI界面3. 创建隧道取得连接Ubuntu系统公网地址4. 打开Windows的命令界面并输入命令 前言 随着科技和经济的发展…

RK3568 lunch新增设备

rk3568 android9.0 &#xff0c;32位平台 1.进入devices/rockchip/rk356x/ 将rk3568_box_32 拷贝一份&#xff0c;命名为hdx6 2.打开vendorsetup.sh,添加lunch选项 add_lunch_combo hdx6-user add_lunch_combo hdx6-userdebug 3.进入hdx6&#xff0c;修改rk3568_box_32.mk…

行业追踪,2023-08-08

自动复盘 2023-08-08 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

C++ STL string类

目录 一.为什么学习string类 &#xff08;1&#xff09; C语言中的字符串 &#xff08;2&#xff09;标准库里面的string类 二. string类的常用接口说明 &#xff08;1&#xff09;string类对象的常见构造 &#xff08;2&#xff09;string类对象的容量操作 1.size(),le…