V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Lullaby
V2EX  ›  Java

有必要给每个 DML 操作加上事务吗?

  •  
  •   Lullaby · 2015-08-07 23:40:09 +08:00 · 2846 次点击
    这是一个创建于 3424 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据库MySQL
    后台开发语言是Java/Python
    应用场景是提供接口服务基于HTTP RESTful API

    7 条回复    2015-08-09 04:19:38 +08:00
    powergx
        1
    powergx  
       2015-08-08 01:33:56 +08:00 via iPhone   ❤️ 1
    一组操作就用事务
    incompatible
        2
    incompatible  
       2015-08-08 01:48:47 +08:00   ❤️ 1
    API层的一个post/put/delete操作,涉及到的DML当然要放到同一个事务中
    Lullaby
        3
    Lullaby  
    OP
       2015-08-08 12:33:32 +08:00
    @powergx
    @incompatible
    我是说单独一个post/put/delete,并不是一组啊
    incompatible
        4
    incompatible  
       2015-08-08 13:13:38 +08:00 via iPhone
    @Lullaby API层的操作与数据库层面的操作并不是一对一的关系啊
    比如你用微信零钱发了一个红包 这个过程中服务器端除了减少你零钱余额,还要记录一条零钱流水 这样就是两条sql 它们肯定是要放在同一个事务中的
    Lullaby
        5
    Lullaby  
    OP
       2015-08-08 13:31:51 +08:00
    @incompatible 这种当然要放在一个事务中啊,但是如果我只有一条插入sql,有必要显示开启、提交事务吗?
    incompatible
        6
    incompatible  
       2015-08-08 16:32:23 +08:00
    @Lullaby 没必要
    但是在java里大家通常是这么做的:
    有通过sql操作数据库的Dao层
    有对外暴露业务行为的Service层

    Dao层的sql并不关心自己是否在或不在事务中,事务是在Service层通过AOP来配置的。只要是涉及到insert/delete/update的业务方法,通常都要开启事务。因为我们并不确定这个业务方法是否永远只会调用一个Dao,此时不为其配置事务,今后业务发生改变需要调用更多Dao时,很可能就会忘记加上事务。
    Lullaby
        7
    Lullaby  
    OP
       2015-08-09 04:19:38 +08:00
    @incompatible 嗯嗯 说的很好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2921 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:05 · PVG 22:05 · LAX 06:05 · JFK 09:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.