黑马程序员技术交流社区

标题: Struts2、Mybatis、Spring整合事务不起作用 [打印本页]

作者: lu774374302    时间: 2016-2-15 11:38
标题: Struts2、Mybatis、Spring整合事务不起作用

  applicationContext.xml
  
<?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:context="http://www.springframework.org/schema/context"
  
         xmlns:tx="http://www.springframework.org/schema/tx"
  
         xmlns:aop="http://www.springframework.org/schema/aop"
  
         xsi:schemaLocation="http://www.springframework.org/schema/beans  
  
                   http://www.springframework.org/schema/beans/spring-beans.xsd
  
                   http://www.springframework.org/schema/context  
  
                   http://www.springframework.org/schema/context/spring-context.xsd
  
                   http://www.springframework.org/schema/tx  
  
                   http://www.springframework.org/schema/tx/spring-tx.xsd
  
        http://www.springframework.org/schema/aop
  
        http://www.springframework.org/schema/aop/spring-aop.xsd">
  
  
         <context:property-placeholder location="classpath:jdbc.properties"  />
  
  
         <bean id="dataSource"  class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">
  
                   <property name="driverClass"  value="${jdbc.driver}"/>
  
                   <property name="jdbcUrl"  value="${jdbc.url}"/>
  
                   <property name="user"  value="${jdbc.username}"/>
  
                   <property name="password"  value="${jdbc.password}"/>
  
         </bean>
  
  
         <bean id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
  
                   <property name="dataSource"  ref="dataSource" />
  
                   <property name="configLocation"  value="classpath:SqlMapConfig.xml" />
  
                   <property name="typeAliasesPackage"  value="com.ssi.core.domain" />
  
         </bean>
  
  
         <bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  
                   <property name="dataSource"  ref="dataSource" />
  
         </bean>
  
         <tx:annotation-driven proxy-target-class="true"  transaction-manager="transactionManager"  />
  
         
  
         <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  
                   <property name="basePackage"  value="com.ssi.core.mapper" />
  
                   <property name="sqlSessionFactoryBeanName"  value="sqlSessionFactory" />
  
         </bean>
  
         
  
         <context:component-scan base-package="com.ssi.core.service.impl"  />
  
         
  
         <aop:aspectj-autoproxy />
  
  </beans>
  

  
package com.ssi.core.mapper;
  
  
import com.ssi.core.domain.User;
  
  
public interface UserMapper {
  
   
  
   public void add(User user) throws  Exception;
  
  }
  
  
UserMapper.xml
  
<?xml version="1.0" encoding="UTF-8"  ?>
  
<!DOCTYPE mapper
  
    PUBLIC  "-//mybatis.org//DTD Mapper 3.0//EN"
  
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
   
  
<mapper namespace="com.ssi.core.mapper.UserMapper">
  
  
         <insert id="add"  parameterType="user">
  
                   <![CDATA[
  
                            INSERT  INTO t_user(
  
                                     id,      
  
                                     username,
  
                                     password,
  
                                     gender,  
  
                                     birthday,
  
                                     remark   
  
                            )  VALUES(
  
                                     #{id},      
  
                                     #{username},
  
                                     #{password},
  
                                     #{gender},  
  
                                     #{birthday},
  
                                     #{remark}  
  
                            )
  
                   ]]>
  
         </insert>
  
  
</mapper>
  

  
package com.ssi.core.service;
  
  
import com.ssi.core.domain.User;
  
  
public interface UserService {
  
         
  
         public void add(User user) throws Exception;
  
  }
  
  
package com.ssi.core.service.impl;
  
  
import  org.springframework.beans.factory.annotation.Autowired;
  
import org.springframework.stereotype.Service;
  
import  org.springframework.transaction.annotation.Propagation;
  
import  org.springframework.transaction.annotation.Transactional;
  
  
import com.ssi.core.domain.User;
  
import com.ssi.core.mapper.UserMapper;
  
import com.ssi.core.service.UserService;
  
  
@Service
  
@Transactional
  
public class UserServiceImpl implements UserService {
  
  
         @Autowired
  
         private UserMapper userMapper;
  
  
         @Transactional(propagation = Propagation.REQUIRED)
  
         public void add(User user) throws Exception {
  
                   userMapper.add(user);
  
         }
  
  
}
  

测试类
  
package com.ssi.core.service;
  
  
import java.util.Date;
  
  
import org.junit.Before;
  
import org.junit.Test;
  
import org.junit.runner.RunWith;
  
import org.springframework.aop.support.AopUtils;
  
import  org.springframework.beans.factory.annotation.Autowired;
  
import  org.springframework.test.context.ContextConfiguration;
  
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  
import  org.springframework.test.context.transaction.TransactionConfiguration;
  
import  org.springframework.transaction.annotation.Transactional;
  
  
import com.ssi.common.data.UserGender;
  
import com.ssi.common.dto.UserDTO;
  
import com.ssi.core.domain.User;
  
  
@RunWith(SpringJUnit4ClassRunner.class)
  
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
  
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
  
@Transactional
  
public class UserServiceTest {
  
  
         @Autowired
  
         private UserService userService;
  
  
         @Before
  
         public void setUp() throws Exception {
  
                   System.out.println(userService);
  
         }
  
  
         @Test
  
         @Transactional
  
         public void testAdd() throws Exception {
  
                   User  user = new User();
  
                   user.setUsername("admin");
  
                   user.setPassword("admin");
  
                   user.setGender(UserGender.MALE);
  
                   user.setBirthday(new Date());
  
                   user.setRemark("Test Add");
  
                   userService.add(user);
  
                   throw new RuntimeException("Transactional  Test.....");
  
         }
  
  }
  



作者: Devilbaby    时间: 2016-2-20 22:51
这是学到什么地方了?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2