• Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required


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

    再其他配置均为改动的情况下执行出错: 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 BaseDaoImpl extends SqlSessionDaoSupport {
    2     @Resource
    3     public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
    4         super.setSqlSessionFactory(sqlSessionFactory);
    5     }

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    swift 第三方库迁移错误解决“Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choo
    ios 绘制虚线 CGContextSetLineDash的使用
    在 cell 中获取 textFlied内容的使用
    swift 委托代理传值
    swift3.0基础语法
    webSocket开源框架:SocketRocket 简单的使用
    iOS开发— Socket编程
    常见的 HTTP错误代码大全
    lambda表达式的使用
    浅谈静态代理模式 01
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4853190.html
Copyright © 2020-2023  润新知