<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## SagaMapper SagaMapper是自動生成逆向操作,是BeetlSQL的Saga實現重要的一環。 BeetlSQL通過SagaMapper來自動生成逆向SQL,同BaseMapper類似,但有自己的實現方式 ```java public interface SagaMapper<T> { /** sega 改造的接口**/ @AutoMapper(SagaInsertAMI.class) void insert(T entity); @AutoMapper(SagaUpdateByIdAMI.class) int updateById(T entity); @AutoMapper(SagaDeleteByIdAMI.class) int deleteById(Object key); /** 正常接口 **/ @AutoMapper(SingleAMI.class) T single(Object key); @AutoMapper(UniqueAMI.class) T unique(Object key); @AutoMapper(SelectByIdsAMI.class) List<T> selectByIds(List<?> key); } ``` 可以看到,insert方法的實現是SagaInsertAMI而不是InsertAMI,SagaInsertAMI代碼如下 ```java @Override public Object call(SQLManager sm, Class entityClass, Method m, Object[] args) { int ret = sm.insert(args[0]); //逆向操作 SagaContext sagaContext = SagaContext.sagaContextFactory.current(); Class target = args[0].getClass(); String idAttr = sm.getClassDesc(target).getIdAttr(); Object key = BeanKit.getBeanProperty(args[0],idAttr); sagaContext.getTransaction().addTask(new InsertSagaRollbackTask(sm.getName(),target,key) ); return ret; } @Data public static class InsertSagaRollbackTask implements SagaRollbackTask { //todo } ``` SagaInsertAMI除了調用SQLManager完成insert操作,BeetlSQL也會記錄一個反向操作到sagaContext里,如果在Saga事務環境里要求回滾,則會執行這個方向操作 除了內置操作提供回滾外,SagaMapper支持提供反向sql的注解 @SagaUpdateSql ```java @SagaUpdateSql( sql="update stock set count=count+1 where id=?", rollback = "update stock set count=count-1 where id=? and count!=0" ) void addStock(String id); ``` @SagaUpdateSql同@Sql,但提供了反向SQL,一旦要求saga回滾,則執行rollback表示 > 對于更新操作,Saga認為如果更新api返回0,則說明回滾失敗。比如上面庫存,因為id不存在或者count=0情況下,更新失敗。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看