`
zhb8015
  • 浏览: 399832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Spring Roo杂谈
浏览量:0
社区版块
存档分类
最新评论

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

阅读更多

之前一直使用mybatis+mybatis-spring-1.1.1系统升级mybatis后使用mybatis-spring-1.2.0

再其它配置均为修改的情况下运行出错: Property 'sqlSessionFactory' or'sqlSessionTemplate' are required

从SqlSessionDaoSupport 这个类的源码中可以看出原因是mybatis-spring-1.2.0 中取消了自动注入 SqlSessionFactory 和SqlSessionTemplate

/**
 * Convenient super class for MyBatis SqlSession data access objects.
 * It gives you access to the template which can then be used to execute SQL methods.
 * <p>
 * This class needs a SqlSessionTemplate or a SqlSessionFactory.
 * If both are set the SqlSessionFactory will be ignored.
 * <p>
 * {code Autowired} was removed from setSqlSessionTemplate and setSqlSessionFactory
 * in version 1.2.0.
 *
 * @see #setSqlSessionFactory
 * @see #setSqlSessionTemplate
 * @see SqlSessionTemplate
 * @version $Id$
 */
public abstract class SqlSessionDaoSupport extends DaoSupport {

  private SqlSession sqlSession;

  private boolean externalSqlSession;

  public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
    if (!this.externalSqlSession) {
      this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);
    }
  }

  public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
    this.sqlSession = sqlSessionTemplate;
    this.externalSqlSession = true;
  }
 ……
}

1.1.1中代码片段为:

 1 public abstract class SqlSessionDaoSupport extends DaoSupport {
 2 
 3     private SqlSession sqlSession;
 4 
 5     private boolean externalSqlSession;
 6 
 7     @Autowired(required = false)
 8     public final void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
 9         if (!this.externalSqlSession) {
10             this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);
11         }
12     }
13 
14     @Autowired(required = false)
15     public final void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
16         this.sqlSession = sqlSessionTemplate;
17         this.externalSqlSession = true;
18     }
19     ……
20 
21 }

可能是为了解决多数据源的问题吧取消了自动注入。没用到多数据源不太关心这个。

解决方案:因为我们dao层是继承于一个dao基类所以只要在这个基类中注入任意一个属性即可。 SqlSessionFactory 在spring配置文件中已经配置。

1 public class CommonDao extends SqlSessionDaoSupport {
2     @Resource
3     public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
4         super.setSqlSessionFactory(sqlSessionFactory);
5     }

 

分享到:
评论

相关推荐

    Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程

    在整合的配置中很多地方都是可以注入 SqlSessionTemplate 代替 SqlSessionFactory 的注入的。 二、实现代码 1、继承 SqlSessionTemplate 重写 getSqlSessionFactory、getConfiguration 和 SqlSessionInterceptor ...

    详解 MapperScannerConfigurer之sqlSessionFactory注入方式

    `MapperScannerConfigurer`支持多种方式注入`SqlSessionFactory`,包括`sqlSessionFactory`、`sqlSessionFactoryBeanName`、`sqlSessionTemplate`和`sqlSessionTemplateBeanName`。然而,`sqlSessionFactory`这种...

    boot_sqlSessionFactory

    初始条件 : Maven的3.3.3 JDK 1.8测试程序 : 从项目根目录和初始状态开始(从github重新开始) mvn全新安装(由于存在模块间依赖关系而需要) mvn -f ./TestApiWar/pom.xml spring-boot:运行预期的 : 应该正确...

    MyBatis构建SqlSessionFactory.txt

    创建数据库配置属性文件 jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis_db?useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=123456

    sqlSessionFactory方式-多数据源的案例代码

    本案例代码主要围绕`sqlSessionFactory`,它是MyBatis框架中的核心组件,负责创建SqlSession对象,进而执行SQL操作。在多数据源场景下,如何灵活切换和管理不同的数据库连接是关键。以下将详细介绍`...

    springboot整合Mybatis

    SpringBoot 整合 MyBatis。解决因Mybatis-Spring版本过高引起的“Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required”异常

Global site tag (gtag.js) - Google Analytics