Bee 事务注解 @Tran 使用实例

注意事项和使用步骤如下:


## 注意事项
### 1.不要在接口使用@Tran注解;接口的方法上使用也不起效果.
### 2.直接在使用main运行,@Tran不起效.  ```javapublic static void main(String[] args) {TranTest test=new TranTest();test.testTran();}
```
### 3. 直接在本类中,调用本类的一个@Tran标志的方法不起效果.
//          testTran2();  //直接使用不起效果.
要使用以下方式:
//  @Autowired
//  AccountRest self; //在本类中,调用本类的一个@Tran标志的方法.  //AccountRest是本类的类名
//          self.testTran2(); //在本类中,调用本类的一个@Tran标志的方法.
参考:AccountRest.java  ### 4.不使用接口,直接在类里使用@Tran
参考:TranTest3
然后在其它类里,调用TranTest3的方法.  ### 5.@Tran作用于类级别,所有的方法,都会被拦截.要确保是否所有的方法都需要,若只有部分方法需要,
只在需要的方法上使用@Tran即可.
TranService接口,不需要写@Tran
一般建议使用以下方式. ```java
@Service
@Tran
public class TranTest implements TranService {
...
}/*** 不要在接口使用@Tran注解.* 接口的方法上使用也不起效果.* @author Kingstar* @since  1.17*/
public interface TranService {public void testTran();public void testTran4();
}```### 6.@Tran的默认实现,是从V1.17提供.需要将TranHandler交给spring容器管理.
若没有使用bee-springboot,需要将TranHandler交给spring容器管理.
<bean id="tranHandler" class="org.teasoft.beex.transaction.TranHandler"></bean>  ### 7.为什么在接口中不能直接放@Tran注解.
https://cloud.tencent.com/developer/article/1862474  ### 8.为什么直接在本类中,不能调用本类的一个@Tran标志的方法(不起效果).
https://blog.csdn.net/ai_xiangjuan/article/details/79478186?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0-79478186-blog-80891911.pc_relevant_multi_platform_whitelistv1&spm=1001.2101.3001.4242.1&utm_relevant_index=3## 使用步骤
### 1.@Tran的默认实现,是从V1.17提供.需要将TranHandler交给spring容器管理.
若没有使用bee-springboot,需要将TranHandler交给spring容器管理.
<bean id="tranHandler" class="org.teasoft.beex.transaction.TranHandler"></bean>  ### 2 使用@Tran注解
使用时,需要避免 注意事项提到的问题.  @Autowired  TranService tranService;
tranService.testTran(); // 将@Tran独立到一个实现接口的类,可以.  ### 3 检查@Tran是否生效
除了业务上检测外,可以通过查看日志  ```properties
[INFO] [Bee] Tran annotation intercept in TranHandler, start...
.... 其它日志
[INFO] [Bee] Tran annotation intercept in TranHandler, end...
```

主要Java源码

package com.tran.rest;import static com.automvc.common.service.CommService.isNullPara;import java.util.ArrayList;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.teasoft.bee.osql.BeeSQLException;
import org.teasoft.bee.osql.Suid;
import org.teasoft.bee.osql.service.ObjSQLRichService;
import org.teasoft.bee.osql.service.ObjSQLService;
import org.teasoft.bee.osql.transaction.Tran;
import org.teasoft.honey.osql.core.BeeFactoryHelper;import com.automvc.common.jq.Result;
import com.tran.entity.Account;
import com.tran.service.PrdSettingsService;/*** @author AiTeaSoft.com* @since  1.0* Create on 2022-07-19*/
@RestController
@RequestMapping("/account")
public class AccountRest {@AutowiredTranService tranService;// @Autowired
//  AccountRest self; //在本类中,调用本类的一个@Tran标志的方法.@Autowiredprivate ObjSQLService objSQLService;@Autowiredprivate ObjSQLRichService objSQLRichService;@AutowiredTranTest3 tranTest3;@Autowired(required = true)PrdSettingsService prdSettingsService;@RequestMapping("/list")public Result list(Account account,@RequestParam(value = "page", defaultValue = "1", required = false) int page,@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {Result result = new Result();if (isNullPara(result, account)) return result;try {prdSettingsService.saveadd();//            testTran2();  //直接使用不起效果.//         self.testTran2(); //在本类中,调用本类的一个@Tran标志的方法.tranService.testTran(); // 将@Tran独立到一个实现接口的类,可以.List<Account> list = null;int total = objSQLRichService.count(account);if (total == 0) {list = new ArrayList<>();} else {list = objSQLRichService.select(account, (page - 1) * rows, rows);}result.setRows(list);result.setTotal(total);} catch (BeeSQLException e) {result.setErrorMsg(e.getMessage());}return result;}@RequestMapping("/list3")public Result list3(Account account,@RequestParam(value = "page", defaultValue = "1", required = false) int page,@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {Result result = new Result();if (isNullPara(result, account)) return result;tranTest3.testTran();result.setMsg("不使用接口,直接在类里使用@Tran");return result;}// 连了在方法级别没有事务注解的@RequestMapping("/list4")public Result list4(Account account,@RequestParam(value = "page", defaultValue = "1", required = false) int page,@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {Result result = new Result();if (isNullPara(result, account)) return result;try {prdSettingsService.saveadd();//         testTran2();  //直接使用不起效果.//         self.testTran2(); //在本类中,调用本类的一个@Tran标志的方法.tranService.testTran4(); // 将@Tran独立到一个实现接口的类,可以.List<Account> list = null;int total = objSQLRichService.count(account);if (total == 0) {list = new ArrayList<>();} else {list = objSQLRichService.select(account, (page - 1) * rows, rows);}result.setRows(list);result.setTotal(total);} catch (BeeSQLException e) {result.setErrorMsg(e.getMessage());}return result;}@RequestMapping("/list5")public Result list5(Account account,@RequestParam(value = "page", defaultValue = "1", required = false) int page,@RequestParam(value = "rows", defaultValue = "20", required = false) int rows) {Result result = new Result();if (isNullPara(result, account)) return result;tranService.testTran5();result.setMsg("使用@Tran,检测发生异常时,rollback");return result;}@Tranpublic void testTran2() {Suid suid = BeeFactoryHelper.getSuid(); // 1Account account = new Account();account.setDescriptioin("test tran");System.out.println("---------00000------------------------");suid.insert(account); // 2.1 插入suid.select(account); // 2.2 查询}}

查看事务注解日志

查看事务注解异常 rollback

完整工程源码下载

Bee事务注解@Tran使用实例工程-Java文档类资源-CSDN下载

Bee事务注解@Tran使用实例工程; 基于Spring boot + Bee;

涉及spring aop, 注解拦截,应该有类上和应该在方法的注解拦截.

@within,@annotation使用实例.

Bee 事务注解 @Tran 使用实例相关推荐

  1. 26.SpringBoot事务注解详解

    转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...

  2. Spring提取@Transactional事务注解的源码解析

    声明:本文是自己在学习spring注解事务处理源代码时所留下的笔记: 难免有错误,敬请读者谅解!!! 1.事务注解标签 <tx:annotation-driven /> 2.tx 命名空间 ...

  3. 一对一关联查询注解@OneToOne的实例详解(一)

    转载自: https://www.cnblogs.com/boywwj/p/8092915.html 一对一关联查询注解@OneToOne的实例详解 表的关联查询比较复杂,应用的场景很多,本文根据自己 ...

  4. Spring——事务注解@Transactional的源码分析

    本篇结合我的这篇<Spring事务注解@Transactional>,为第二节[2.Spring声明式事务的原理]的详细说明,debug了被@Transactional包裹的目标方法所在类 ...

  5. 三木之Spring事务注解实现

    AOP底层实现原理 动态代理 ( 什么是动态代理 1.代理对象,不需要实现接口 2.代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型 ...

  6. Spring——事务注解@Transactional【建议收藏】

    在某些业务场景下,如果一个请求中,需要同时写入多张表的数据或者执行多条sql,为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到事务:Spring框架下,我们经 ...

  7. mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解

    本文主要向大家介绍了SQLServer数据库:事务与隔离级别实例讲解,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 上班途中,你在一处ATM机前停了下来.正当你在敲入密码 ...

  8. 事务(注解声明式事务管理)

    1.什么事务 (1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败 2.事务四个特性(ACID) (1)原子性 (2)一致性 (3)隔离性 (4)持久性 1.原子 ...

  9. Spring4.x()-Spring的Jdbc事务-注解

    Spring的Jdbc事务-注解 一.拷贝必要的jar包到工程的lib目录 二.创建spring的配置文件并导入约束 <?xml version="1.0" encoding ...

  10. 事务注解放到类上面 下面私有方法有效吗_【面试】足够应付面试的Spring事务源码阅读梳理(建议珍藏)...

    Starting from a joke 问:把大象放冰箱里,分几步? 答:三步啊,第一.把冰箱门打开,第二.把大象放进去,第三.把冰箱门带上. 问:实现Spring事务,分几步? 答:三步啊,第一. ...

最新文章

  1. 【组队学习】【32期】数据可视化(Matplotlib)
  2. Grpc+Grpc Gateway实践二 有些复杂的Hello World
  3. 项目管理六大制约因素_知道了这7点,软件项目管理会变得更简单!
  4. Events are a bad idea?
  5. 中文代码示例之5分钟入门TypeScript
  6. [css] 用CSS绘制一个红色的爱心
  7. Android 手机不赚钱为啥还要做
  8. android中使用setVideoURI()播放视频
  9. 微电子专业深度盘点:哪所大学芯片最强?强在哪?(第2弹)
  10. sas 服务器版安装文件,安装SAS怎样配置服务器
  11. Latex:表格插入图片
  12. 实现进程互斥需要遵循的原则
  13. 教你解决路由黑洞5招
  14. ARM裸机-13.LCD
  15. vb.net中关于byval和byref的使用
  16. 四叶草云演-CTF04# 后台管理系统
  17. iOS App 上架流程
  18. 少儿编程里java_Java少儿编程神器Greenfoot(10)方法
  19. 吴恩达机器学习--学习笔记
  20. Linux 使用unzip解压时报错End-of-central

热门文章

  1. 富士康年轻工人现状调查:厌倦并依赖着-转自鲜果网
  2. Django基础(29): select_related和prefetch_related的用法与区别
  3. 山东省大学生软件设计大赛
  4. unity3d 虚拟博物馆_基于Unity3d的博物馆移动信息化系统
  5. MAHLE PIS 3097/2.2 bar
  6. 安装移动视频监控 即时监控地铁车厢
  7. Android 第三方登录之支付宝登录
  8. 注册表Regedit实现右键管理员权限运行notepad++打开文件
  9. 5c5cSs,暗光提升明显 iPhone 5s/5c/5样张对比
  10. (批处理)批量文件夹重命名,要求是在原文件夹名前加上英文字母前缀aa