Spring配置事务在DAO层和Service层

信息流广告ROI线性预测看板&投放分析监控看板展示&数据处理入库全流程 此看板数据量太大,在tableau public部署运行速度极慢,因此用图片作展示 数据清洗 阅读详情
Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。 事务属性含有上面描述的事务定义。
PlatformTransactionManager:
HibernateTransactionManager需要一个SessionFactory的引用
JtaTransactionManager
一.把事务放置在了DAO层:
<!—hibernateTransactionManager-->
<bean id="transactionManager"
       class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
       class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—spring对DAO层的事务代理-->
<bean id="companyDAOProxy"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager">
              <ref bean="transactionManager" />
       </property>
       <property name="target">
              <ref local="companyDAOTarget" />
       </property>
       <property name="transactionAttributes">
              <props>
              <prop key="insert*">PROPAGATION_REQUIRED</prop>
              <prop key="delete*">PROPAGATION_REQUIRED</prop>
              <prop key="find*">
              PROPAGATION_REQUIRED,readOnly
              </prop>
              </props>
       </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
       class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
       <property name="companyDAO">
              <ref bean="companyDAOProxy" />
       </property>
</bean>
<!—spring对Service层的代理-->
<bean id="companyManageProxy"
       class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="proxyInterfaces">
              <value>com.vstsoft.querycompany.service.CompanyManage</value>
       </property>
       <property name="target">
              <ref bean="companyManageTarget" />
       </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
       class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
       <property name="companyManage">
              <ref local="companyManageProxy" />
       </property>
</bean>
二.把事务放置在了Service层:
<!—jtaTransactionManager-->
<bean id="jtaTransactionManager"
       class="org.springframework.transaction.jta.JtaTransactionManager" />
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
       class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—spring对DAO层的代理-->
<bean id="companyDAOProxy"
       class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="proxyInterfaces">
              <value>com.vstsoft.querycompany.dao.CompanyDAO</value>
       </property>
       <property name="target">
              <ref bean="companyDAOTarget" />
       </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
       class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
       <property name="companyDAO">
              <ref bean="companyDAOProxy" />
       </property>
</bean>
<!—spring代理业务层的事务管理-->
<bean id="companyManageProxy"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager">
              <ref local="jtaTransactionManager" />
       </property>
       <property name="transactionAttributes">
              <props>
                     <prop key="set*">PROPAGATION_REQUIRED</prop>
                     <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
              </props>
       </property>
       <property name="target">
              <ref bean="companyManageTarget" />
       </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
       class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
       <property name="companyManage">
              <ref local="companyManageProxy" />
       </property>
</bean>
在service层的接口实现CompanyManageImpl里面有个setData方法:按顺序执行数据查询,数据删除,数据插入数据库行为,如果哪一步出异常(运行时异常),事务回滚,只有所有行为都没成功,事务提交。
【深度学习新浪潮】Harness Engineering 入门实战必看|6个从零可跑开源项目,新手快速上手垂域AI工程落地 很多同学入门 AI Agent、做大模型垂域落地时,都会卡在同一个痛点:只会调用模型、写简单Prompt,却不懂如何做约束管控、流程护栏、任务编排、多智能体边界隔离。而这正是的核心价值。不同于纯理论概念,Harness Engineering 更偏向工程实战,新手不用啃复杂论文,从开源项目动手实操是最高效的学习方式。本文从零基础易上手、可本地一键部署、支持二次改造做实战项目。 阅读详情

相关推荐

Kaggle时间序列竞赛金牌方案解析与实战指南

本文深度解析了Kaggle时间序列竞赛的金牌方案,揭示了其成功不仅依赖先进模型,更在于系统工程思维。文章系统阐述了从数据理解、特征工程到模型集成与后处理的全流程,并重点剖析了分层建模、自定义损失函数、时序交叉验证等核心技巧,为参赛者提供了从理论到实战的完整指南。

weixin_29196315的博客 356

Spring Boot多数据源事务@DSTransactional的使用

集成com.baomidou,引入dynamic-datasource依赖,实现多数据源,这里说下事务问题:1、一个方法中使用同一个数据源;2、一个方法中使用了多个数据源;

涛哥是个大帅比 1万+

国产蓝牙MCU选型避坑指南:从汇顶到杰理,这7家厂商的实测体验

本文基于一线开发者对汇顶、泰凌微、沁恒、博通集成、奉加微、杰理、翱捷等七家主流国产蓝牙MCU厂商的实测体验,提供了一份详实的选型避坑指南。文章不仅对比了各厂商芯片的SDK质量、文档、开发工具与技术支持等“软实力”,还深入剖析了实际开发中可能遇到的功耗、射频、版本兼容性等核心痛点,并针对不同项目需求给出了具体的选型决策建议,旨在帮助工程师高效完成国产蓝牙MCU选型。

u5v6w7的博客 338

dao层使用@DS指定切换的数据源,业务层同一个业务进行调用不同dao方法切换数据源,保持业务的事务

dao层使用@DS指定切换的数据源,业务层同一个业务进行调用不同dao方法切换数据源,保持业务的事务

m0_64081550的博客 906

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7834

重头开始学ROS(8)---LVI-SAM复现与实机部署Ubuntu20.04以及如何适配6轴imu

本文详细记录了在Ubuntu20.04环境下复现LVI-SLAM系统的过程,主要包含四个部分:源码编译、问题解决、数据录制和6轴IMU适配。在编译过程中遇到GTSAM、PCL版本、OpenCV路径等典型问题并给出解决方案;详细说明了ROS bag包的录制规范;针对6轴IMU硬件限制,提供了核心代码修改方案。文章为LVI-SLAM系统在非标准环境下的部署提供了实用参考,特别适合需要适配不同硬件配置的研究者。

qq_73991479的博客 1558

多数据源管理——@DS和@DSTranscation使用介绍和原理分析

@DS和@DSTranscation的使用和原理分析

m0_46427469的博客 1万+

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1451

Mybatis使用@DS配置多数据源

Mybatis使用@DS配置多数据源

weixin_42246822的博客 4390

ArcGIS 泛克里金插值

按照如图所示的步骤填写参数,1处选择subset features。 2:输入数据。 3:输出训练数据。 4:输出测试数据。 5:80,表示80%的比例是训练数据,20%是测试数据。 6:输入的百分比。 1:选择geostatistical wizard。 2:插值方法,克里金插值 3:训练数据。 4:数据字段。 点击下一步: 1:表示泛克里金插值。 2:输出表面类型。 3:转换类型none。 4:趋势剔除的阶数。 点击下一步: 表示东北—西南方向变化平缓。 1:模型优化 2:模型类型(stabl.

yuanYW7556的博客 7275

【100%通过率】2023华为od机试C卷【电脑病毒感染】Java&Go 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 2861

Spring Boot 多数据源(读写分离)入门

1. 概述 在项目中,我们可能会碰到需要多数据源的场景。例如说: 读写分离:数据库主节点压力比较大,需要增加从节点提供读操作,以减少压力。 多数据源:一个复杂的单体项目,因为没有拆分成不同的服务,需要连接多个业务的数据源。 本质上,读写分离,仅仅是多数据源的一个场景,从节点是只提供读操作的数据源。所以只要实现了多数据源的功能,也就能够提供读写分离。 2. 实现方式 目前,实现多数据源有三...

weixin_42073629的博客 447

ShaderJoy —— 简单又神奇的 “合体” 函数【GLSL】

smin 函数 它实际上有两种常见的实现方式 多项式 指数 多项式 smin 函数图 其对应的代码为 float smin( float a, float b ) { // 多项式 const float k = 0.5; float h = clamp(0.5 + 0.5 * (b - a) / k, 0.0, 1.0); return mix(b, a, h) - k * h * (1.0 - h); } 从上图中我们可以很明显的看出有两处不连...

ShaderJoy 的兴趣技术杂货铺 1857

Spring配置事务在DAO层和SERVICE层(事务在service中的实现)

<br />Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。 事务属性含有上面描述的事务定义。 <br />PlatformTransactionManager: <br />Hibe

kangojian的专栏 8172

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[转]Spring事务配置在DAO和Service层

Spring事务配置在DAO和Service层 分类: Spring 2011-03-16 10:40 453人阅读 评论(0) 收藏 举报 【转载自http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html】 【感谢原作者:hk2000c】 Spring通过AOP实现声明式事务管理。通常通过TransactionPr...

justice_jl的专栏 170

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring配置事务在Dao层和Service层

【转载自http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html】  【感谢原作者:hk2000c】  Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们

落天雨、、 1万+

Spring配置事务在DAO层和SERVICE层

【转载自[u]http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html[/u]】 【感谢原作者:hk2000c】 Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bea...

王小龙的骨灰盒 202

Spring事务配置在DAO和Service层

【转载自http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html】 【感谢原作者:hk2000c】 Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransaction

idafish的专栏 1989

spring事务到底用于service层还是dao层

Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性。 事务得根据项目性质来细分:事务可以设置到三个层面(dao层、service层和web层)。 第一:web层事务,这一般是针对那些安全性要求较高的系统来说的。例如电子商务网站。粒度小,一般系统用不着这么细。 第二:service层事务,这是一常见的事务划分, 将事务设置在业务逻辑上,只要业务逻辑出错或异常就事务...

161

SSM框架dao层和service层配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:contexe="http://w...

bai2276的博客 545

SSM框架下各个层的解释说明

持久层:DAO层(mapper) 业务层:Service层 表现层:Controller层(Handler层) View层 各层联系 SSM框架整合说明

lutianfei的专栏 10万+

SpringMVC(14) —— SSM整合:Spring层(spring-service.xml)

    在第13篇博客中,我们实现了SSM整合的第一大步,使用mybatis实现MVC3层架构中的M层     本篇博客我们要做的就是为项目引入spring框架,它的作用如下 IOC对应到以前的MVC架构中,它的作用就是管理service调用dao层的对象实例,和servlet层调用service层的对象实例,即管理dao层和service层的bean;【所以我们要将service层要用的dao层的实例注入spring容器中

Jzandth的博客 1095

SSM框架:(3)整合service层

service层调用dao层,需要在service实现类(serviceImpl)中设置引用的dao层接口对象及set方法,以便set注入 如: //service调dao层:组合Dao //BookMapper为dao层接口 private BookMapper bookMapper; public void setBookMapper(BookMapper bookMapper) { this.bookMapper = bookMapper; }

炒饭加点盐的博客 338

saas-export项目service层

五)service (1)service依赖dao (2)编写测试 (3)如何读取另一个工程的spring的配置 classpath: 加载当前maven工程的resources目录下的配置文件 classpath*: 加载当前maven工程及其依赖工程的resources目录下的配置文件 applicationContext-*.xml: 读取所有符合规则的文件 TestCompanyService /** * Created by 李柏霖 * 2020/10/22 20:33 */ pack

水巷石子的博客 1807

[spring] 事务管理配置文件配置文件

搭配使用 dao层配置文件(applicationContext-dao.xml): https://blog.youkuaiyun.com/a755199443/article/details/90272909 service层配置文件(applicationContext-service.xml): https://blog.youkuaiyun.com/a755199443/article/details/9027...

朱同学的博客 1032

java service session_Service层进行事务管理,Dao层获得session进行事务处理抛异常的情况...

1. spirng中配置service层的事务管理在一个web项目中,如果使用SSH框架,一般在spring中配置事务管理。我们一般不会在dao层使用transaction,事务被配置在service层上更为合理,因为业务层方法表示逻辑上的一个原子操作。spring中配置service层的事务管里,配置文件中的配置如下:class="org.springframework.aop.framewo...

weixin_33329305的博客 385

【Spring】在Spring框架下使用注解配置JDBC事务

算是对Spring的一个阶段性总结吧,注解、依赖注入、JDBC、事务等重点基本都涉及到了,值得记录一下。 首先是最重要的xml配置文件。虽然使用了注解方式,不过还是需要在XML中设置一些东西。 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springfram

Java Island 3786
上一篇: Spring的四种声明式事务的配置-Hibernate事务
下一篇: struts2基础
inter0507
博客等级 码龄21年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值