zoukankan      html  css  js  c++  java
  • 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     }

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

  • 相关阅读:
    A % B Problem
    封锁阳光大学
    数楼梯
    海滩防御
    修复公路
    四子连棋
    口袋的天空
    兔子数
    逆序对&求逆序对
    【模板】单源最短路径*
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4853190.html
Copyright © 2011-2022 走看看