1. 程式人生 > >spring中呼叫jdbcTemplate實現update插入未成功

spring中呼叫jdbcTemplate實現update插入未成功

程式碼如下:

@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserDaoTest{


@Resource
private UserDao userDao;


@Test
public void testinsertUser() {
/*===========非註解實現插入操作(可以)========*/
/* ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");  
User user = new User();
user.setUserName("admin");
user.setPassword("213122");
UserDao userDao = (UserDao) ac.getBean("userDao"); 
int affectedRows =  userDao.insertUser(user);*/
/*===========註解實現插入操作(有返回值,但是資料庫未插入,原因可能是事務未提交的緣故)========*/
User user = new User();
user.setUserName("wudi");
user.setPassword("213122");
int affectedRows =  userDao.insertUser(user);
System.out.println("======》"+affectedRows);
Assert.assertEquals(affectedRows, 1);
logger.warn("the number of rows affected: "+affectedRows);
}

問題如下:在上面的·方法中,非註解方式呼叫配置檔案實現資料插入成功,註解方式呼叫配置檔案資料插入返回值正常,資料庫表插入id(自增)也明顯改變,但是資料庫就是沒有該條資料,即插入本質上未成功,我想知道原因是什麼,是事務未提交的緣故?但是事務明顯有始有終啊,下面是日誌:

一月 16, 2018 11:40:00 上午 org.springframework.test.context.transaction.TransactionalTestExecutionListener startNewTransaction
資訊: Began transaction (1): transaction manager [o

[email protected]39b75a89]; rollback [true]
11:40:00.423 [main] DEBUG c.a.druid.pool.PreparedStatementPool - {conn-10010, pstmt-20000} enter cache
======》1
11:40:00.424 [main] WARN  com.flux.tmsws.test.UserDaoTest - the number of rows affected: 1
一月 16, 2018 11:40:00 上午 org.springframework.test.context.transaction.TransactionalTestExecutionListener endTransaction

有人說是配置檔案的問題,下面是關於事務的配置檔案:

 <!-- 開啟事務控制的註解支援(後新增的,也沒起作用) -->  
    <tx:annotation-driven transaction-manager="transactionManager" />
    <context:component-scan base-package="com.flux.tmsws.*" />
    <bean id = "transactionManager"  class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" > 
         <property name = "dataSource"> 
             <ref bean = "dataSource"/> 
         </property> 
    </bean>
    
    <bean id="jdbcTemplate"
        class="org.springframework.jdbc.core.JdbcTemplate" abstract="false" lazy-init="false" autowire="default">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>
    <bean id="userDao" class="com.flux.tmsws.dao.Impl.UserDaoImpl">
    </bean>

請問原因在哪呢???