栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring的事务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring的事务



比如转账,要么付账和收账都成功执行,否则都不执行(回滚)。
不同数据库的当问机制不同,需有不同的事务处理的机制、对象和方法。spring提供一种处理事务的统一模型,能使用统一步骤、方式完成多种不同数据库访问技术的事务处理。

spring中提供处理事务的接口和实现类:











例如下例的spring项目:

两个实体类Goods、Sale,Goods表示商品,Sale用户表示交易记录:


两个持久层的接口及其mapper配置文件:




注意:这里的SaleDao接口中的insertSale()方法中有参数Sale的对象sale,在SaleDao的配置文件中写insert语句可以用#{}来指代sale中的属性。
mybatis.xml文件内容:

applicationContext.xml文件内容(注意红线圈出的添加部分):


一个业务层的接口(含有一个客户买商品的方法):

实现接口的类:

含有两个属性saleDao和goodsDao,这里看到直接调用这两个属性的方法对数据库操作可能会产生疑惑,因为按理应该使用xml文件的信息。但其实在main()方法中使用了applicationContext.xml文件的信息,获取了spring容器中的buyService对象(即BuyGoodsServicImpl对象,在该bean对象中通过ref属性给BuyGoodsServicImpl对象中的saleDao和goodsDao,自动获取spring容器中的bean对象赋值,虽然applicationContext.xml文件中没有写关于saleDao和goodsDao的bean标记,但是加了如下标记,该标记自动扫描name为basePackage的property标记的value值所指定的dao包下的xml文件,生成对应的bean对象(对象的id为接口的首字母小写)。

main程序:

上图所示,本地mysql数据库中的goods表(sale表为空,还未有交易):

可以发现,该表中并没有id为1007的商品,所以程序会报错(NullPointerException)终止交易,但是这时在buy()方法里已经向sale表中插入了一项,但这项并无效用需要撤回,这里需要用到spring的事务机制,在buy()前加注解:

这样,当该方法终止时会对本地数据库进行回滚操作,即撤销之前对数据库的操作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396620.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号