编程式事务

采用编程式事务

1、 getCurrentSession()openSession()的区别?

* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会

* 采用getCurrentSession()创建的sessioncommitrollback时会自动关闭,而采用openSession创建的session必须手动关闭

2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:

* 如果使用的是本地事务jdbc事务)

<property name=”hibernate.current_session_context_class”>thread</property>

* 如果使用的是全局事务jta事务)

<property name=”hibernate.current_session_context_class”>jta</property>


采用声明式事务

Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中申明。用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可;在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便。

Spring框架提供了两种事务管理方:声明事务编程事务编程事务是通过编写代码来实现事务管理的方。在Spring中,使用编程事务需要借助于事务管理器(TransactionManager)和编程事务模板(TransactionTemplate)来进行操作。 首先,你需要配置一个事务管理器,例如使用Spring提供的DataSourceTransactionManager来管理事务。然后,你可以在代码中使用TransactionTemplate来执行事务操作。 下面是一个简单的示例代码: ```java import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; public class TransactionalService { private TransactionTemplate transactionTemplate; public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; } public void performTransactionalOperation() { transactionTemplate.execute(new TransactionCallback<Void>() { public Void doInTransaction(TransactionStatus status) { try { // 执行数据库操作等业务逻辑 // 如果发生异常,可以通过调用 status.setRollbackOnly() 设置回滚 } catch (Exception e) { status.setRollbackOnly(); } return null; } }); } } ``` 在上面的示例中,通过调用transactionTemplate.execute方法来执行需要进行事务管理的业务逻辑。如果发生异常,通过调用status.setRollbackOnly()方法设置事务回滚。 编程事务相对于声明事务更加灵活,可以根据业务需要精确控制事务的边界和行为。但是编程事务的代码相对较多,容易引入冗余代码,同时也影响代码的可读性和维护性。 因此,在实际开发中,一般推荐使用声明事务来管理事务,而编程事务更适用于一些特殊情况下的事务管理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值