Nutz Dao与Spring集成

一、集成方式

  1、采用Spring的IOC,但是事务还是采用Nutz自己管理控制;
  2、采用Spring的声明式事务管理控制;

二、IOC

直接依据数据源注入即可

    @Beanpublic NutDao nutz(DataSource dataSource) {return new NutDao (dataSource);;}

此时Nutz Dao的事务并不能通过Spring的事务来管理(如@Transactional注解、手动事务等),还是通过Nutz本身的 Trans.exec(() -> {}) 进行管理

例:

    public void testService() {Trans.exec(() -> {dao.insert("test_table", Chain.make("id", 3));throw new RuntimeException("test exception");});}

三、将事务交给Spring管理

step1:继承NutDao类,重写run方法

public class SpringNutDao extends NutDao {public SpringNutDao(DataSource dataSource) {super(dataSource);}@Overridepublic void run(ConnCallback callback) {Connection con = DataSourceUtils.getConnection(getDataSource());try {callback.invoke(con);} catch (Exception e) {if (e instanceof RuntimeException) {throw (RuntimeException) e;} else {throw new RuntimeException(e);}} finally {DataSourceUtils.releaseConnection(con, getDataSource());}}
}

step2:将继承类注入

    @Beanpublic NutDao nutz(DataSource dataSource) {return new SpringNutDao(dataSource);}

step3:将数据源事务管理注入

    @Beanpublic DataSourceTransactionManager  transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}

例1:

    @Transactionalpublic void testService() {dao.insert("test_table", Chain.make("id", 3));throw new RuntimeException("test exception");}

例2:

    @Autowiredprivate PlatformTransactionManager transactionManager;public void testService() {DefaultTransactionDefinition def = new DefaultTransactionDefinition();TransactionStatus transactionStatus = transactionManager.getTransaction(def);try{dao.insert("test_table", Chain.make("id", 3));throw new RuntimeException("test exception");}catch (Exception e){if (transactionStatus.isCompleted()) {System.out.println("事务已完成,无需回滚");}else {transactionManager.rollback(transactionStatus);}}}

四、XML文件方式

Nutz DAO与spring集成讨论 - 6小贝 - 博客园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15195.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视觉硬件选型和算法选择(CNN)

基础知识 什么是机械视觉: 机械视觉是一种利用机器代替人眼来进行测量和判断的技术,通过光学系统、图像传感器等设备获取图像,并运用图像处理和分析算法来提取信息,以实现对目标物体的识别、检测、测量和定位等功能。 机械视觉与人类视觉有什…

Qt元对象系统

目录 1.元对象系统概述 2 宏QOBJECT slots emit 2.1 QOBJECT 2.2 信号槽相关宏 3 信号和槽 3.1 信号和槽的链接使用 3.2 信号槽触发流程 3.3 信号参数自定义 3.4 槽函数中获取发射信号的对象(widget) 3.4.1 使用QObject::sender() 3.4.2 在连…

verilog练习:i2c slave 模块设计

文章目录 前言1. 结构2.代码2.1 iic_slave.v2.2 sync.v2.3 wr_fsm.v2.3.1 状态机状态解释 2.4 ram.v 3. 波形展示4. 建议5. 资料总结 前言 首先就不啰嗦iic协议了,网上有不少资料都是叙述此协议的。 下面将是我本次设计的一些局部设计汇总,如果对读者有…

什么是中间件中间件有哪些

什么是中间件? 中间件(Middleware)是指在客户端和服务器之间的一层软件组件,用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件,它可以在两个系统之间传递、处理、转换数据,以达到协…

【键盘识别】实例分割

第一步 键盘检测 方案一 canny边缘检测 canny边缘检测检测结果不稳定,容易因为复杂背景或光线变换检测出其他目标。 如图是用canny边缘检测方法标出的检测出的边缘的四个红点。 参考的是这篇文章OpenCV实战之三 | 基于OpenCV实现图像校正_opencv 图像校正-CSDN博客 方案二…

线程上下文-ThreadLocal原理

ThreadLocal主要作用:为每个线程提供独立的变量副本,实现线程间的数据隔离,从而避免多线程环境下的资源共享冲突。 原理 ThreadLocal有个内部类 ThreadLocalMap,顾名思义是个Map结构:key为 ThreadLocal实例&#xff0…

【Python】元组

个人主页:GUIQU. 归属专栏:Python 文章目录 1. 元组的本质与基础概念1.1 不可变序列的意义1.2 元组与数学概念的联系 2. 元组的创建方式详解2.1 标准创建形式2.2 单元素元组的特殊处理2.3 使用 tuple() 函数进行转换 3. 元组的基本操作深入剖析3.1 索引操…

SpringSecurity:授权服务器与客户端应用(入门案例)

文章目录 一、需求概述二、开发授权服务器1、pom依赖2、yml配置3、启动服务端 三、开发客户端应用1、pom依赖2、yml配置3、SecurityConfig4、接口5、测试 一、需求概述 maven需要3.6.0以上版本 二、开发授权服务器 1、pom依赖 <dependency><groupId>org.springfr…

android的Compose 简介

Jetpack Compose 简介 Jetpack Compose 是 Android 官方推出的声明式 UI 工具包&#xff0c;用于替代传统 XML 布局&#xff0c;简化界面开发流程。它基于 Kotlin 语言&#xff0c;通过函数式编程实现高效、灵活的 UI 构建&#xff0c;支持实时预览和更直观的状态管理。 优势…

四次挥手详解

文章目录 一、四次挥手各状态FIN_WAIT_1CLOSE_WAITFIN_WAIT_2LAST_ACKTIME_WAITCLOSE 二、双方同时调用close()&#xff0c;FIN_WAIT_1状态后进入CLOSING状态CLOSING状态 三、TIME_WAIT状态详解(1) TIME_WAIT状态下的2MSL是什么MSL &#xff08;报文最大生存时间&#xff09;为…

LIMO:上海交大的工作 “少即是多” LLM 推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型&#xff08;LLM&#xff09;中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据&#xff08;通常超过 100,000 个示例&#xff09;&#xff0c;但本文展…

51单片机之引脚图(详解)

8051单片机引脚分类与功能笔记 1. 电源引脚 VCC&#xff08;第40脚&#xff09;&#xff1a;接入5V电源&#xff0c;为单片机提供工作电压。GND&#xff08;第20脚&#xff09;&#xff1a;接地端&#xff0c;确保电路的电位参考点。 2.时钟引脚 XTAL1&#xff08;第19脚&a…

基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的阿尔兹海默症严重程度检测系统是一种创新的医疗辅助工具&#xff0c;旨在通过先进的计算机视觉技术提高阿尔兹海默症的早期诊断和病情监测效率。阿尔兹海默症是一种渐进性的神经退行性疾病&#xff0c;通常表现为认知障碍、记忆丧失和语言障碍等症状…

TAPEX:通过神经SQL执行器学习的表格预训练

摘要 近年来&#xff0c;语言模型预训练的进展通过利用大规模非结构化文本数据取得了巨大成功。然而&#xff0c;由于缺乏大规模高质量的表格数据&#xff0c;在结构化表格数据上应用预训练仍然是一个挑战。本文提出了TAPEX&#xff0c;通过在一个合成语料库上学习神经SQL执行…

轻松理解CSS中的float浮动元素

1.float:left&#xff0c;float:right可以让元素脱离原始文档流&#xff0c;也就是所谓的“浮动”&#xff0c;可以理解为元素漂浮在原本所占位置的上空&#xff0c;意思是元素漂浮起来了&#xff0c;不占原始文档流的空间。但是&#xff0c;别的元素可以感知到浮动元素的存在&…

Vue与Konva:解锁Canvas绘图的无限可能

前言 在现代Web开发中&#xff0c;动态、交互式的图形界面已成为提升用户体验的关键要素。Vue.js&#xff0c;作为一款轻量级且高效的前端框架&#xff0c;凭借其响应式数据绑定和组件化开发模式&#xff0c;赢得了众多开发者的青睐。而当Vue.js邂逅Konva.js&#xff0c;两者结…

【Git】tortoisegit使用配置

1. 安装 首先下载小乌龟&#xff0c;下载地址:https://tortoisegit.org/download/, 可以顺便下载语言包&#xff01; 安装时&#xff0c;默认安装就可以&#xff0c;一路next。也可以安装到指定目录中 目前已完成本地安装&#xff0c;接下来就需要与远程仓库建立连接&…

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决 1、报错情况 下载&#xff1a;https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开&#xff0c;启动&#xff1a; 日志有报错&#xff1a; 点右侧m图标&#xff0c;maven有以下报误 &…

C++ 设计模式 - 访问者模式

一&#xff1a;概述 访问者模式将作用于对象层次结构的操作封装为一个对象&#xff0c;并使其能够在不修改对象层次结构的情况下定义新的操作。 《设计模式&#xff1a;可复用面向对象软件的基础》一书中的访问者模式因两个原因而具有传奇色彩&#xff1a;一是因为它的复杂性&a…

DeepSeek在FPGA/IC开发中的创新应用与未来潜力

随着人工智能技术的飞速发展&#xff0c;以DeepSeek为代表的大语言模型&#xff08;LLM&#xff09;正在逐步渗透到传统硬件开发领域。在FPGA&#xff08;现场可编程门阵列&#xff09;和IC&#xff08;集成电路&#xff09;开发这一技术密集型行业中&#xff0c;DeepSeek凭借其…