Java学习-编程式的事务管理
编程式事务提供了TransactionTemplate 模板类,该类可以大大减少事务操作的代码。因此TransactionTemplate 采用Callback 避免让开发者重复书写其打开事务、提交事务及回滚事务等代码,同时TransactionTemplate 无须书写大量的try..catch 块。
HibernateTemplate 必须提供PlatformTransactionManager 实例。该实例既可以在代码中手动设置,也可以使用Spring 的依赖注入。总之,只要获取了PlatformTransactionManager 引用, TransactionTemplate 就可以完成事务操作。
使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过TransactionStatus 的setRollbackOnly 显式回滚事务。
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。Callback 也是Spring 的经典设计,用于简化用户操作,下面兄弟连www.lampbrother.net 就帮大家总结了一些TransactionCallback 包含的方法:如下。
• Object dolnTransaction(TransactionStatus status) 。
该方法的方法体就是事务的执行体。
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResultl类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback 接口的子接口,该抽象类包含一个抽象方法:
• void dolnTransactionWithoutResult(TransactionStatus status)该方法与dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。
在下面的示例中, PlatformTransactionManager 实例采用适用于Hibernate 的事务管理器来实现类HibernateTransactionManager,该实现类是个局部事务管理器,容器中仅仅部署了该事务管理器bean ,因此应在代码中于动为TransactionTemplate 注入事务管理器bean。下面是Hibernate 局部事务管理的配置文件的源代码:
<?xml version="1.0" encoding="gb2312"?>
<! -- Spring 配置文件的DTD 定义-->
<!DOCTYPE beans PUBL工C "-//SPRING//DTD BEAN//EN"
''http://www.springfrarnework.org/dtd/sp工rng-beans.dtd">
<!-- Spring 配置文件的根元素是beans-->
<beans>
<!--定义数据源,该bean 的ID 为dataSource-→
<bean id="dataSource" class="org.springfrarnework.jdbc.datasource.DriverManagerDataSource">
<!-- 指定数据库驱动-->
<property narne="driverClassNarne"><value>corn.rnysql.jdbc.Driver</value></property>
<!-- 指定连接数据库的URL-->
<property narne="url"><value>jdbc:rnysql://wonder:3306/j2ee</value></property>
<!--root 为数据库的用户名-->
<property name="username"><value>root</value></property>
<!-- pass 为数据库密码-->
<property name="password"><value>pass</value></property>
</bean>
<!--定义Hibernate 的SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--依赖注入数据源,注入上文定义的dataSource-->
<property name="dataSource"><ref local="dataSource"/></property>
<!--mappingResouces属性用来列出全部映射文件>
<property name="mappingResources">
<list>
<!--以下用来列出所有的PO 映射文件-->
<value>lee/MyTest.hbm.xml</value>
</list>
</property>
<!--定义Hibernate 的SessionFactory的属性-->
<property name="hibernateProperties">
<props>
<!-- 指定Hibernate 的连接方法-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<! 不同数据库连接,启动时选择create , update , create-drop-->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!--配置Hibernate 的事务管理器一〉
<!--使用HibernateTransactionManager类,该类是PlatformTransactionManager 接口针对采用Hibernate持久化连接的特定实现。-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!--HibernateTransactionManager bean 需要依赖注入一个SessionFactory bean 的引用-->
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
下面是采用TransactionTemplate和HibemateTemplate的事务操作代码:
public class TransactionTest
{
public static void main(String[] args)
{
//因为并未在web 应用中测试,故需要手动创建Spring 的上下文
final ApplicationContext ctx = new FileSystemXrnlApplicationContext("bean.xml");
//获得Spring 上下文的事务管理器
PlatformTransactionManager transactionManager=(PlatformTransactionManager)ctx.getBean("transactionManager");
final SessionFactory sessionFactory = (SessionFactory)ctx.getBean("sessionFactory");
//以事务管理器实例为参数,创建TransactionTemplate对象
TransactionTemplate tt = new TransactionTemplate(transactionManager);
//设置TransactionTemplate的事务传播属性
tt. setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUlRED);
//执行TransactionTemplate的execute方法,该方法需要TransactionCallback实例
tt.execute(new TransactionCallbackWithoutResult()
//采用TransactionCallbackWithoutResult匿名内部类的形式执行
protectedvoid dolnTransactionWithoutResult(TransactionStatus ts)
try
{
//以SessionFactory 实例为参数创建HibernateTemplate
HibernateTemplate hibernateTemplate =
new HibernateTemplate(sessionFactory);
MyTestpl =丑ew MyTest ("Jack");
//保存第一个实例
hibernateTemplate.save(pl);
//让下面的数据库操作抛出异常即可看出事务效果。前面的操作也
//不会生效
MyTestp2 = new MyTest ("Jack");
//保存第二个实例,可将Person 的name 属性设为标识属性,并
//引起主键重复的异常,可看出前一条记录也不会加入数据库中
hibernateTemplate.save(p2);
}
catch (Exception e)
{
ts.setRollbackOnly();
}
}
});
}
}
分享到:
相关推荐
高端智能型锂离子电池极耳连接片焊接贴胶设备:双PLC控制,全自动化与分布式总线节点管理系统,高端锂离子电池极耳连接片焊接贴胶设备 使用两个欧姆龙NJ501-1500系列PLC做主控制,威纶通MT8121IE以太网触摸屏做人机操作系统。 包含两套PLC程序+两套触摸屏程序+电气BOM表+机械工位布局图+电气布局图原理图 整机采用汇川GR10-EC-6SW网络分支器模块,整机分布式总线节点控制。 传动系统,使用汇川SV660N系列总线伺服驱动器(搭载汇川MS1系列电机,涵盖1000W电机,750W电机,400W电机)整机多达30轴的总线运动控制。 IO模块采用多个汇川GL10-RTU-ECTA总线通讯耦合器搭载汇川GL10-1600END(16点数字输入模块),GL10-0016ETN(16点数字输出模块),搭载多个汇川GR10-4ADE模拟量控制模块。 自动暂停后,重新启动,气缸及伺服电机被人为操作后,不在自动暂停时的位置,报警提示,不在记忆位,防止人为操作与自动状态不一致,导致撞击。 上下游设备治具进站出站自动交互扫码控制。 触摸屏精美,布局合理,完整模板框架,一级菜单底层,二级
DSP驱动的数字电源解决方案:C2000系列主控的Buck-Boost双向变换器——300W功率输出系统,DSP数字电源方案 Buck-Boost双向变器 数字控制方式:C2000系列 主控TMS32F28069 300W,8A,输入10-75V,输出5-75V 双向升降压功率转器buck-boost结构 提供主板PCB,原理图(AD格式),源代码,无控制板资料。 ,DSP数字电源方案; Buck-Boost双向变换器; C2000系列主控; TMS32F28069; 300W功率转换器; 输入输出电压范围; 双向升降压; 主板PCB; 原理图(AD格式); 源代码。,DSP数字电源控制方案:300W Buck-Boost双向变换器
模拟改性电解质中锌枝晶沉积行为的均匀化模型:离子扩散与电导率的变化效应研究。,comsol锌(锂)枝晶均匀沉积模型模拟锌沉积在加入添加剂改性后,离子扩散系数和电导率发生改变。 最后改性后的电解质使得锌均匀沉积 ,comsol模拟; 锌锂枝晶沉积; 添加剂改性; 离子扩散系数变化; 电导率变化; 改性后电解质; 锌均匀沉积,"改性电解质模拟锌枝晶均匀沉积模型:离子扩散与电导率变化研究"
西门子1200 PLC自动流程程序写作的三种方法及模版详解,西门子1200PLC博途3种自动流程程序写法 a5PLC自动流程程序模版 西门子程序自动流程标准模版 本案例介绍3种不同的方法去写自动流程程序: 第一种是用scl case写的; 另外的两种使用梯形图的模式去写; 使用此类方法去写,清晰明了,非常使用。 并且针对程序配有视频解说,内容详细,简单明了,一看就懂,是每个工程师入门和进阶都要掌握的知识,只有掌握好了程序流程的写法,写起程序思路才能明确,逻辑才能清晰,轻松上手博图15及以上可以打开 ,核心关键词: 西门子1200PLC; 博途; 自动流程程序写法; SCL Case; 梯形图; 视频解说; 程序流程标准模版; 工程师入门进阶知识; 博图15及以上。,"西门子1200 PLC博途自动流程程序编写:三法解析与标准模版"
"《深入浅出:_Zynq_UltraScale_ZU5_FPGA电路原理图设计及PCB绘制仿真优化全流程教程》——从入门到精通,小白也能轻松掌握的电子工程宝典",_Zynq_UltraScale_ZU5_FPGA电路原理图设计PCB绘制仿真优化例。 该教程是从原理图的绘制到pcb走线,到仿真实现,很适合小白从入门到精通, ,核心关键词:_Zynq; UltraScale; ZU5 FPGA; 电路原理图设计; PCB绘制; 仿真优化; 入门到精通教程。,Zynq UltraScale ZU5 FPGA电路原理图设计与PCB仿真优化教程
单相变压器绕组及铁芯振动形变仿真模型:基于洛伦兹力与磁致伸缩效应的时域仿真研究,comsol的单相变压器绕组及铁芯振动形变仿真模型 1、单相变压器组振动形变模型:绕组在漏磁场的洛伦兹力作用下振动,在长期作用下发生位移形变 2、单相变压器铁芯振动形变模型:铁芯在磁致伸缩作用下发生振动形变 注:时域仿真可以设置观察点,导出随时间变化的变压器磁通、位移、压力、形变曲线 ,comsol;单相变压器;绕组振动形变;铁芯振动形变;洛伦兹力;磁致伸缩;时域仿真;观察点。,COMSOL单相变压器绕组与铁芯振动形变仿真模型
"COMSOL气体放电仿真模型:流注放电现象研究,棒-板电极模型下的等离子体粒子化学反应模拟,包含33个反应式,多参数分析电场与等离子体特性",COMSOL气体放电仿真模型(流注放电),棒——板电极模型,模拟空气中流注发展过程,等离子体粒子化学反应模型,包含33个反应式,可分析电场强度,电子密度,电子温度等多个参数的变化。 ,核心关键词:COMSOL气体放电仿真模型; 流注放电; 棒-板电极模型; 空气流注发展; 等离子体粒子化学反应模型; 反应式; 电场强度; 电子密度; 电子温度。,COMSOL气体放电仿真:流注放电与等离子体特性分析模型
基于有限元仿真的Comsol绝缘子电热耦合与辐射散热计算模型研究:揭示温度场与电磁场分布规律。,有限元仿真,comsol绝缘子电热耦合及辐射散热计算模型,可得到绝缘子温度场及电磁场分布。 ,有限元仿真; Comsol模型; 绝缘子; 电热耦合; 辐射散热; 温度场; 电磁场分布。,多物理场仿真计算模型研究:电热耦合及辐射散热分析
阿尔珐公司员工管理系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
证书_00008030-001079D21A53402E.zip
基于波动模型的不规则粗糙表面生成技术:自定义波动分布与赋值,实现表面形态精细控制,粗糙表面,波动模型生成,用于在物体表面生成不规则的粗糙表面,或面表面的波动边界等,可自定义波动分布与赋值。 ,粗糙表面; 波动模型生成; 不规则; 自定义波动分布; 赋值,自定义波动分布的粗糙表面生成技术
.archivetempgame_patch_1.30.21.13274.pak
"Comsol热流耦合拓扑优化技术:以最大化放热量与功率耗散为目标函数的优化策略",Comsol热流耦合拓扑优化。 目标函数采用最大化放热量和功率耗散。 ,Comsol;热流耦合;拓扑优化;目标函数;最大化放热量;功率耗散,Comsol热流耦合优化:最大化放热与功率耗散
httpd24-apr-devel-1.4.8-3.el6.centos.alt.x86_64.rpm
COMSOL在品质因子分析中的电场截面图:能带与电场分布的深入探讨,comsol 能带 品质因子 电场截面图 ,comsol; 能带计算; 品质因子; 电场截面图;,"Comsol模拟:电场截面图与品质因子的关系"
基于生物降解后对流–弥散–吸附微分方程的模拟与研究.pdf
《COMSOL瓦斯抽采技术及多物理场耦合案例分析》——包括多场耦合效应与各种模型的钻研实践。,comsol瓦斯抽采 该案例涉及有效应力场,瓦斯渗流场等多物理场耦合。 包括钻孔瓦斯抽采模型,热流固耦合模型,顺层瓦斯抽采模型,注氮驱替瓦斯模型,水力压裂模型,三轴裂隙岩体渗流应力耦合,采空区瓦斯抽采,钻孔损伤,水力冲孔模型、煤粒双孔扩散模型和注水井、生产井都是自己琢磨的,提供学习参考。 ,comsol瓦斯抽采; 物理场耦合; 钻孔瓦斯抽采模型; 注氮驱替瓦斯模型; 煤粒双孔扩散模型; 钻孔损伤模型; 水力压裂模型。,COMSOL瓦斯抽采多物理场耦合案例研究
"高频宽调谐范围LC-VCO设计报告:从基础理论到实践应用,低噪声高效率射频IC设计入门指南",LC-VCO设计报告。 高频,宽调谐范围,低价位噪声,射频ic设计入门。 调谐范围31.1~34.6GHz,相位噪声-101.69~-99.54dBc Hz-1MHz ,输出功率12dbm左右。 有设计报告和仿真文件,使用VerilogA写了一个d2b_2bit模块,55nm工艺。 报告很详细,包含了基础理论和设计过程,适合入门,可,附带pdk。 练习,无版图。 ,核心关键词:LC-VCO设计报告; 高频; 宽调谐范围; 低价位噪声; 射频ic设计入门; 调谐范围31.1~34.6GHz; 相位噪声; 输出功率12dbm; 设计报告; 仿真文件; VerilogA; d2b_2bit模块; 55nm工艺; 详细报告; 基础理论; 设计过程; PDK; 练习; 无版图。,高频宽调谐LC-VCO设计报告:理论、仿真与实践无版图指南
智能计算系统:从深度学习到大模型 第2版 陈云霁-讲义PPT
圣美歌AP系列电脑调音软件下载是专为音响爱好者和专业人士设计的一款强大工具, 这款软件的主要功能在于帮助用户对音频系统进行精确的数字信号处理,以提升音乐播放效果,提供更丰富的听觉体验。