Lullaby
V2EX  ›  Java

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

  •  
  •   Lullaby · Aug 7, 2015 · 3320 views
    This topic created in 3935 days ago, the information mentioned may be changed or developed.

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

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

    Dao层的sql并不关心自己是否在或不在事务中,事务是在Service层通过AOP来配置的。只要是涉及到insert/delete/update的业务方法,通常都要开启事务。因为我们并不确定这个业务方法是否永远只会调用一个Dao,此时不为其配置事务,今后业务发生改变需要调用更多Dao时,很可能就会忘记加上事务。
    Lullaby
        7
    Lullaby  
    OP
       Aug 9, 2015
    @incompatible 嗯嗯 说的很好
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3021 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 163ms · UTC 15:12 · PVG 23:12 · LAX 08:12 · JFK 11:12
    ♥ Do have faith in what you're doing.