- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
事务模板
事务模板
为什么提供事务模板
截⾄到现在为⽌,除⾮你使⽤ dao.execute(Sql ...) ,⼀次执⾏多个 SQL ,是
事务安全的,其他的情况 均是事务不安全的, 如如下代码:
Pet pet1 = dao.fetch(Pet.class,XiaoBai);
Pet pet2 = dao.fetch(Pet.class,XiaoHei);
pet1.setNic name(BaiBai);
pet2.setNic name(HeiHei);
dao.update(pet1);
dao.update(pet2);
尤其是请关注最后两句:
dao.update(pet1);
dao.update(pet2);
当第⼆句话抛出异常的时候,第⼀句话不能被回滚。这两条调⽤就是不事务安全的。
如果我想让 pet 1 和 pet2 的更新操作是原⼦性的,它们必须⼀同成功,⼀同失败,怎
么办呢?
使⽤事务模板
Nutz .Dao 提供了简单的解决办法: 事务模板
⼀段⽰例代码
上⼀节的例⼦可以修改为:
final Pet pet1 = dao.fetch(Pet.class,XiaoBai);
final Pet pet2 = dao.fetch(Pet.class,XiaoHei);
pet1.setNic name(BaiBai);
pet2.setNic name(HeiHei);
// Begin transaction
Trans.exec(new Atom(){
public void run() {
dao.update(pet1);
dao.update(pet2);
}
});
// End transaction
提供⼀个 org .nutz .trans.Atom 接⼜的匿名实现,在⾥⾯执⾏的所有的 Dao 操作都是原
⼦性的,因为它们在 同⼀个 “原⼦(Atom)” ⾥。
事务的关键就是原⼦的界定
事务最核⼼的是原⼦的界定,在 Nutz .Dao 中,界定原⼦的⽅法出奇的简单,借助匿名
类,你可以随时将⼀段 代码⽤你的原⼦实现包裹住。⽽ Trans.exec() ⽅法接受数⽬可
变的原⼦,每个原⼦都是事务性的。
Trans.exec 的函数 明
public static void exec(Atom... atoms);
被原⼦实现包裹住的代码就是事务安全的,⽆论它同时操作了多少个 DataSource 。
Nutz .Dao 提供的原⼦接⼜⾮常简单,实际上它就是 j a a.lang .Runnable 的⼀个别名,下
⾯就是这个接⼜的 全部代码:
pac age com.zzh.trans;
public interface Atom extends Runnable {}
这⼏乎是我写过的最简单的 Ja a 类了,正是因为它简单,所以才有⽆限的威⼒。你如
果查看过 Nutz 的源代 码包,在和数据库操作的地⽅,你总会和 Atom 不期⽽遇。很
多朋友曾经很不适应匿名类的写法,是的,我在 早期写 Ja a 的时候也 较讨厌匿名
类,但是熟悉了以后,你会真正喜欢上这个东西,就像你写 Ja ascript 的 ⼀段时候以
后,多数⼈都会喜欢上“ 闭包”⼀样。你可以把匿名类当作 Ja a 给你的闭包。
采⽤事物模板的来界定事物有⼀个缺点,这是 Ja a 语⾔带来的限制:你有可能需要将
⼀些相关的变量声明成 final 的。 并且在 run 函数中,你只能向外抛 RuntimeException
或其⼦类。
设置事务的级别
在 JDBC 的 j a a.sql .Connection 接⼜中定义的 setTransactionIsolation 函数可以设置事务
的级别 Nutz .Dao 也提供另外⼀个静态函数,允许你设置事务的级别:
Trans.exec 的函数 明
public static void exec(int level, Atom... atoms);
这⾥的第⼀个参数 le el 和 j a a.sql .Connection 接⼜中的 setTra
您可能关注的文档
- 【异乡好居】旧金山房产投资热,购置Lumina公寓正逢时.pdf
- 一种可调节悬浮式自动撒粉器.pdf
- 【奖学金申报】.pptx
- 一种基于模糊逻辑的新型故障序分量选相元件_郑涛.pdf
- 一种检测点是否在多边形或多面体内的方法.pdf
- 三相功率表和三相有功电能表错误接线速排法_肖贵桥.pdf
- 三菱Q系列PLC新面价表.pdf
- 业主已交装修保证金 为何遭遇二次收费.pdf
- 两样伤逝_几许别情_伤逝_伤兄弟亲情之逝.pdf
- 东风仪表横梁标准.pdf
- 【安全经验分享】镇江新区金科·祥生悦园建设工地宿舍“3·8”较大火灾事故 1根香烟,7条人命!6人追刑!.pptx
- 面向类集成测试序列生成问题的深度强化学习方法研究.pdf
- 包含电热氢多元储能的综合能源系统能量管理策略研究.pdf
- H公司食品机生产项目工时管理优化研究.pdf
- 上覆充水型溶洞对巷道围岩稳定性的影响及控制技术研究.pdf
- 松散层底部黏土层渗透破坏试验及数值模拟研究.pdf
- 凉水井煤矿薄煤层大跨度开切眼空顶距与支护技术研究.pdf
- 基于功能可用性的家用制氧机造型设计研究.pdf
- 基于原子力显微镜技术的神经细胞药物刺激响应研究.pdf
- 电力电子变换器直流母线电容状态在线监测方法研究.pdf
文档评论(0)