本篇是关于 SpringMVC + Spring + Mybatis 项目如何使用事务的记录文章。

  项目正常启动,并得到查询结果。但是控制台打印信息如下:

1
2
3
Creating a new SqlSession
SqlSession was not registered for synchronization because synchronization is not active
JDBC Connection will not be managed by Spring

  原因:没有使用事务。

  解决方法:

  • 在 spring-service.xml 中添加事务管理

    1
    2
    3
    4
    5
    6
    7
    8
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 配置基于注解的声明式事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
  • 需要使用事务的业务类添加注解 @Transactional

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Transactional 
    @Service(value = "stuService")
    public class StudentServiceImpl
    {
    // 或者在具体的业务方法上添加注解
    @Transactional(readOnly = true)
    public List<Student> findStuents(
    @Param("form") Form form, @Param("limit") int limit)
    {

    )
    }

  再次查询,问题解决,控制台打印信息如下:

1
2
3
Creating a new SqlSession
Registering transaction synchronization for SqlSession
JDBC Connection will be managed by Spring

  参考