1、所需jar
cglib-nodep-2.1_3.jar
commons-dbcp.jar
commons-logging-1.1.1.jar
commons-pool-1.6.jar
ibatis-2.3.0.677.jar
mysql-connector-java-5.0.8-bin.jar
spring.jar
spring-context.jar
spring-ibatis.jar
2、spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <!--<value>cfg.cfg</value>--> </list> </property> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/test</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>hitv</value> </property> </bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <value>/mysql-sql-map-config.xml</value> </property> <property name="dataSource"> <ref local="dataSource" /> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref local="dataSource"/> </property> </bean> <bean id="tempProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target"> <ref local="tempService"/> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED,-Exception</prop> </props> </property> </bean> <bean id="tempDao" class="test.TempDao"> <property name="sqlMapClient" ref="sqlMapClient"></property> </bean> <bean id="tempService" class="test.TempService"> <property name="tempDao" ref="tempDao" /> </bean> </beans>
3、ibatis配置文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxSessions="128" maxTransactions="32" maxRequests="512" useStatementNamespaces="true" /> <sqlMap resource="test/temp.xml" /> </sqlMapConfig>
<?xml version="1.0" encoding="GBK" standalone="no"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="temp"> <typeAlias alias="temp" type="test.TempVO" /> <resultMap id="TempVO-Result-List" class="temp"> <result property="id" column="id" /> <result property="name" column="name" /> <result property="type" column="types" /> </resultMap> <select id="getAllTemp" resultMap="TempVO-Result-List"> select * from temp </select> <insert id="insertTemp"> insert into temp(name,types) values(#name#,#type#) </insert> </sqlMap>
4、java代码
package test; public class TempVO { private int id; private String name; private int type; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
package test; import java.sql.SQLException; import java.util.List; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; public class TempDao extends SqlMapClientDaoSupport{ public List<TempVO> getAllTemp() throws SQLException { return getSqlMapClientTemplate().queryForList("temp.getAllTemp"); } public Object insertTemp(TempVO temp) throws SQLException { return getSqlMapClientTemplate().insert("temp.insertTemp", temp); } }
package test; import java.sql.SQLException; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TempService { private TempDao tempDao; public TempDao getTempDao() { return tempDao; } public void setTempDao(TempDao tempDao) { this.tempDao = tempDao; } public void getAllTemp() throws SQLException { List<TempVO> li = tempDao.getAllTemp(); System.out.println(li.size()); } public void insertTemp() throws Exception{ TempVO temp = new TempVO(); temp.setName("name"); temp.setType(1); tempDao.insertTemp(temp); if(true){ //throw new RuntimeException("dsad"); } TempVO temp2 = new TempVO(); temp2.setName("name"); temp2.setType(2); tempDao.insertTemp(temp2); } public static void main(String[] args){ try{ String[] xmls = {"applicationContext.xml"}; ApplicationContext context = new ClassPathXmlApplicationContext(xmls); TempService tempService = (TempService) context.getBean("tempProxy"); tempService.insertTemp(); }catch (Exception e) { e.printStackTrace(); } } }
5、注意事项
spring配置事务时,需要指定exception,否则默认Unchecked Exceptions回滚
获取bean时是获取代理bean
<bean id="tempProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="target">
<ref local="tempService"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<bean id="tempService" class="test.TempService">
<property name="tempDao" ref="tempDao" />
</bean>
TempService tempService = (TempService) context.getBean("tempProxy");
6、事务回滚实际是对代理对象做的操作,如果是bean内部方法a调用方法b,如果方法b做了事务处理,实际不会生效,
需要再找回当前代理对象,通过代理对象调用方法b
((TempService)AopContext.currentProxy()).b();
有时需要将代理对象的exposeProxy设置成true
<property name="exposeProxy">
<value>true</value>
</property>
相关推荐
根据提供的文件信息,本文将详细解析如何在Spring与ibatis框架整合时,通过特定配置来保留ibatis事务处理机制,并实现对事务的自定义控制。文章将围绕标题、描述及部分代码片段展开讨论。 ### Spring与ibatis整合...
同时,Spring的事务管理确保了数据的一致性,比如在处理数据库操作时进行自动的回滚和提交。 **iBatis** 是一个持久层框架,它简化了SQL操作,将SQL语句与Java代码分离。在本demo中,iBatis可能会被用来执行员工...
只需在需要事务的Service层方法上添加@Transactional注解,Spring会自动管理事务的开始、提交或回滚。 5. **高可用性和负载均衡**:在Spring中,可以使用Ribbon或Hystrix组件实现对MySQL集群的负载均衡。这些组件会...
3. **事务控制**:通常在Service层使用@Transactional注解进行事务控制,Spring会自动管理事务的开启、提交和回滚。 4. **异常处理**:在Controller层捕获并处理可能抛出的异常,确保正常响应。 这些jar包的集合...
本示例“spring+ibatis声明式事务Demo”将探讨如何在Spring与iBatis集成环境中使用声明式事务管理。声明式事务管理允许开发者通过配置来控制事务,无需在代码中显式处理事务开始、提交和回滚。 **Spring框架** 是一...
在集成Spring+iBatis+JOTM的环境中,Spring主要负责事务策略的配置和管理,iBatis则作为持久层框架,负责SQL的执行,而JOTM作为事务管理器,确保跨数据库的事务一致性。 1. **环境搭建** - 首先,确保安装了JDK ...
当我们谈论"spring+ibatis声明式事务Demo"时,我们关注的是如何在Spring框架中利用iBatis实现声明式事务管理。 声明式事务管理是Spring框架提供的一种方便、高效的方式,使得开发者无需手动控制事务的开始、提交、...
这样,一旦发生异常,Spring会自动回滚事务,保证数据一致性。 最后,关于Spring与Struts2的集成。Spring作为应用框架,负责依赖注入和事务管理;Struts2则作为MVC框架,处理请求和视图。结合Ibatis,我们可以创建...
然后,Spring可以管理这些SqlSession,提供事务的开始、提交、回滚等操作。 5. **实际应用**:在项目中,开发者会创建具体的Action类,这些类通常会包含处理用户请求的方法,并通过注入的Service类调用业务逻辑。...
- 事务管理器(TransactionManager)配置,如`PlatformTransactionManager`,它与iBatis的数据源配置结合,控制事务的开始、提交和回滚。 - 数据源(DataSource)配置,定义如何连接到数据库。 - iBatis的...
同时,Spring的事务管理能力确保了对数据库操作的原子性和一致性,通过声明式事务管理,可以在XML配置文件中轻松设置事务边界,如开启、提交、回滚等操作。 Ibatis是轻量级的持久层框架,它简化了JDBC的繁琐工作,...
本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...
7. **事务管理**:Spring提供了声明式事务管理,通过在服务层的方法上添加@Transactional注解,可以自动进行事务的开启、提交或回滚,简化了事务处理代码。 8. **单元测试**:在源代码中,通常会有相应的JUnit测试...
完成后,Spring会自动提交或回滚事务。 9. **最佳实践**: - 尽可能使用注解配置,以减少XML配置文件的复杂性。 - 使用Spring的AOP进行事务管理,使事务处理更透明。 - 为每个Mapper接口创建单独的配置,保持...
5. **事务管理**:Spring的PlatformTransactionManager接口用于管理事务,可以自动进行回滚和提交,确保数据一致性。在配置文件中,我们可以选择合适的事务管理器,如DataSourceTransactionManager或...
编程式事务管理需要在代码中显式调用开始、提交、回滚等事务方法,而声明式事务管理则更简洁,通过在配置文件中定义事务规则,Spring自动管理事务的生命周期。 在Spring中配置事务管理,我们需要在`...
Spring提供了声明式事务管理,只需在配置文件中设置事务边界,即可自动处理事务的提交和回滚,确保数据的一致性。 总的来说,Spring、Struts和iBATIS的整合能够为Java Web开发提供一个强大而灵活的架构。通过它们的...
在本项目中,很可能使用了@Transactional注解来实现声明式事务管理,这样可以在方法级别控制事务的开始、提交、回滚等操作,确保数据的一致性。 "分页排序查询"是Web应用中常见的需求,Spring MVC 和 Ibatis 结合...
Spring 是一个全面的后端开发框架,提供依赖注入、面向切面编程、事务管理等功能,而 iBATIS 是一个优秀的数据持久层框架,它简化了数据库操作,将 SQL 查询与 Java 代码分离。 在 Spring 和 iBATIS 的整合中,主要...