对spring事物控制的不解
spring提供了代理TransactionProxyFactoryBean和拦截器TransactionInterceptor对dao进行事物控制。
但这些都是针对dao方法的控制。也就是说在一个更新方法中(insert或者update等等)利用jdbctemplate或者hibernate更新多张表,可以利用aop做到事物控制。
但个人对dao的理解是一个dao对应一张表的全部操作,不应该增加其他表的操作。
这样可以做到耦合低和最大程度的复用。
在service中调用不同的dao进行更新,不同的dao之间实现事务控制。
看了下spring的源码,想自己调用DataSourceUtils,但貌似不行。
考虑将connection交由service处理,同一个connection参数传递给dao,处理完成后在service中提交或者回滚。
但service有可能操作不同的数据库或者用户,就会有多个connection或者datasource。
用这种方式感觉很别扭。
还有就是为什么要使用jdbctemplate和hibernate。老用的话,以后还会写sql么?
jdbctemplate是spring对jdbc的封装,省去了很多代码。但填充数据需要callback函数,当然不是很难写。
hibernate需要写配置文件,很烦。
求真相。。。
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* com.longtuo.server.bo..*Service.*(..))" advice-ref="txAdvice" />
<aop:advisor pointcut="execution(* com.longtuo.role.bo..*Service.*(..))" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="create*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="do*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
这种将transactionManager交由service或者aop做的方式我们在用。但是感觉有点别扭,但是aop的方式能接受。
自己写了个抽象类,dao都继承这个类,感觉挺好用的。
public abstract class BasicDao {
private String alias = null;
protected Connection connection = null;
protected PreparedStatement preparedStatement = null;
protected CallableStatement callableStatement = null;
protected ResultSet resultSet = null;
protected void createQueryConfig(String sql) throws Exception{
connection = DriverManager.getConnection("proxool." + alias);
preparedStatement = connection.prepareStatement(sql);
}
protected void createProcedureConfig(String procedure) throws Exception{
connection = DriverManager.getConnection("proxool." + alias);
callableStatement = connection.prepareCall(procedure);
}
protected void releaseQueryConfig() {
try {
if (connection != null) {
connection.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
if (resultSet != null) {
resultSet.close();
}
} catch(Exception e) {
e.printStackTrace();
}
}
protected void releaseProcedureConfig() {
try {
if (connection != null) {
connection.close();
}
if (callableStatement != null) {
callableStatement.close();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
示例:
try {
this.createQueryConfig(sql);
this.preparedStatement.setString(1, cn);
this.preparedStatement.setInt(2, operation);
this.preparedStatement.setString(3, date);
this.resultSet = this.preparedStatement.executeQuery();
if (resultSet.next()) {
returnValue = resultSet.getInt(1);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
this.releaseQueryConfig();
}
文章记录:
spring事物配置
http://www.blogjava.net/robbie/archive/2009/04/05/264003.html
spring proxool配置
http://blog.csdn.net/goodhumor/archive/2008/03/04/2144911.aspx
jdbctemplate事物控制
http://developer.51cto.com/art/200906/127430.htm
jdbctemplate使用
http://blog.csdn.net/nomads/archive/2006/05/05/709551.aspx
分享到:
相关推荐
spring事务控制jar包,请网上自寻下载
Spring事务控制
这种方式灵活性高,但容易导致事务控制代码与业务逻辑混淆,不易维护。 2. **声明式事务管理**:这是Spring最常用的方式,通过在配置文件或者使用`@Transactional`注解来定义事务边界,使得事务管理与业务逻辑分离...
### Spring事务与数据库操作 ...综上所述,Spring框架不仅提供了强大的事务管理功能,而且还支持灵活的AOP机制,使得开发者能够在保持业务逻辑清晰的同时,轻松实现诸如事务控制、权限验证等跨切关注点。
Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。在Spring中,事务管理分为编程式和声明式两种方式。本篇文章将详细解释Spring事务管理的流程,以及如何通过时序图来理解这一...
Spring的IoC(控制反转)容器和依赖注入机制使得组件之间的耦合度降低,更易于测试和维护。 2. **Spring事务管理**:Spring提供了两种事务管理方式,即编程式事务管理和声明式事务管理。编程式事务管理通过...
Spring是一个广泛应用的Java企业级应用开发框架,它提供了强大的事务管理功能,使得开发者可以方便地控制事务的边界,保证数据的一致性和完整性。 首先,理解事务(Transaction)是数据库操作的基础概念。事务具有...
Spring框架提供了一种声明式和编程式的事务管理方式,允许开发者轻松地控制事务边界,确保事务的ACID(原子性、一致性、隔离性和持久性)属性。 1. **Spring声明式事务管理**:这是Spring中最常用的一种事务管理...
本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@...
`spring-tx-3.2.0.RELEASE.jar`是Spring事务管理模块的核心库,它包含了Spring对事务管理的所有支持。这个版本的Spring事务管理支持JDBC、Hibernate、JPA、iBatis等多种数据访问技术,可以无缝集成到各种持久层框架...
通过这个小型的Spring+Mybatis+MySQL项目,你可以动手实践,了解如何配置和使用Spring事务,同时加深对AOP、数据库事务和框架集成的理解。记得在实际应用中根据需求调整事务策略,以确保数据的一致性和完整性。
在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式处理应用中的事务。本文将深入探讨在"spring事务操作试验"中涉及的关键知识点,并结合提供的资源进行详细阐述。 首先,Spring事务管理...
描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现问题,暴露了开发者对Spring事务机制不足够了解的问题。标签“Spring 事务 失效”直接概括了本文的知识点范围,即Spring...
在"step by step ssh 04 Spring 事务控制"这一主题中,我们将深入探讨如何在SSH架构下实现Spring的AOP(面向切面编程)事务管理,以及如何结合Struts和Hibernate进行用户登录实例。 首先,Struts作为MVC(模型-视图...
在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate的SessionFactory和SessionFactoryBuilder上使用Spring的TransactionProxyFactoryBean来创建...
通过分析这个文件,我们可以看到如何将AOP和事务管理结合起来,实现对数据库操作的事务控制,以及在特定操作前后执行自定义逻辑。 总结来说,Spring事务机制和AOP是Java开发中的重要工具,它们帮助我们构建可维护、...
编程式事务管理是通过编码来控制事务的开始、提交、回滚等操作,而声明式事务管理则是通过配置(如XML或注解)来定义事务边界,更符合面向切面编程(AOP)的思想,也是更常用的方式。 在描述中提到,这是一个能够...
Spring 提供了声明式事务管理,允许开发者在不编写事务管理代码的情况下实现事务控制,极大地简化了事务处理。 实验环境主要包括 Eclipse 或 MyEclipse 开发工具,以及 Spring 4.0 及以上版本,JDK 1.7 及以上版本...
Spring定义了七种事务传播行为,例如PROPAGATION_REQUIRED(默认行为,如果当前存在事务则加入,否则新建)、PROPAGATION_REQUIRES_NEW(始终新建事务,即使在现有事务中调用)等。这些传播行为可以帮助我们处理嵌套...