Spring 实现ibatis事务回滚
网上发现这篇文章,转过来学习一下,好不好用还没有实践,需要自己检验一下。
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>AppConfigServlet</servlet-name> <servlet-class>com.test.ConfigServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
?ApplicationContext.xml
<bean id="transactionManager"ref="dataSource" /> </bean><bean id="businessTarget" /> <bean id="businessBean" /> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED,-Exception</prop> </props> </property> </bean> <bean id="dataSource" ref="dataSource"></property> </bean>
?Ibatis.xml
<insert id="testInsert" parameterparametername="code">public class ConfigServlet extends HttpServlet { /** * UID */ private static final long serialVersionUID = 5118794568550751611L; public void init() throws ServletException { ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); BaseService.getInstance().init(ctx); super.init(); }}?BaseService.java
public class BaseService implements ApplicationContextAware { private static ApplicationContext ctx; private static SqlMapClient sqlMapClient; private static SqlMapClient sqlMapClientProxy; private static BusinessInterface businessBean; private static BaseService instance = new BaseService(); /** * @return 返回 静态类 */ public static BaseService getInstance(){ return instance; } /** * @return 返回 初始化BaseService,存于内存 */ public void init(ApplicationContext ctx) { setApplicationContext(ctx); setSqlMapClient(ctx); setBusinessBean(ctx);// setSqlMapClientProxy(ctx); System.out.println(" INFO - 初始化baseservice成功"); } public void setSqlMapClient(ApplicationContext ctx){ sqlMapClient = (SqlMapClient) ctx.getBean("sqlMapClient"); } /** * @return 返回 sqlMapClient。 */ public SqlMapClient getInstanceSqlMapClient() { return this.sqlMapClient; } /** * 通过spring注入ApplicationContext * * @param ApplicationContext * @return null */ public void setApplicationContext(ApplicationContext arg0) throws BeansException { ctx = arg0; } public Object getBean(String beanName) { return ctx.getBean(beanName); } /** * @return 返回 sqlMapClient。 */ public SqlMapClient getSqlMapClient() { return (SqlMapClient) ctx.getBean("sqlMapClient"); } public void setSqlMapClientProxy(ApplicationContext ctx) { sqlMapClientProxy= (SqlMapClient) ctx.getBean("sqlMapClientProxy"); } public SqlMapClient getSqlMapClientProxy() { return sqlMapClientProxy; } public static BusinessInterface getBusinessBean() { return businessBean; } public static void setBusinessBean(ApplicationContext ctx) { businessBean = (BusinessInterface) ctx.getBean("businessBean"); }}?BusinessInterface.java
?
public interface BusinessInterface { public void hello() throws SQLException;}?
BusinessInterfaceImpl.java
public class BusinessInterfaceImpl implements BusinessInterface { public void hello() throws SQLException { System.out.println("hello Spring AOP."); SqlMapClient sqlMapClient = BaseService.getInstance().getInstanceSqlMapClient(); sqlMapClient.startTransaction(); sqlMapClient.insert("testInsert","7"); System.out.println("1"); sqlMapClient.insert("testInsert","8"); System.out.println("2"); sqlMapClient.insert("testInsert","9"); System.out.println("3"); sqlMapClient.insert("testInsertWrong","10"); sqlMapClient.commitTransaction(); }}?
?
?