Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

来源:互联网 发布:bluecloud 新域名 编辑:程序博客网 时间:2024/05/22 08:18
之前一直使用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.

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. </pre><pre name="code" class="java">/** 
  2.  * Convenient super class for MyBatis SqlSession data access objects. 
  3.  * It gives you access to the template which can then be used to execute SQL methods. 
  4.  * <p> 
  5.  * This class needs a SqlSessionTemplate or a SqlSessionFactory. 
  6.  * If both are set the SqlSessionFactory will be ignored. 
  7.  * <p> 
  8.  * {code Autowired} was removed from setSqlSessionTemplate and setSqlSessionFactory 
  9.  * in version 1.2.0. 
  10.  * 
  11.  * @see #setSqlSessionFactory 
  12.  * @see #setSqlSessionTemplate 
  13.  * @see SqlSessionTemplate 
  14.  * @version $Id$ 
  15.  */  
  16. public abstract class SqlSessionDaoSupport extends DaoSupport {  
  17.   
  18.   private SqlSession sqlSession;  
  19.   
  20.   private boolean externalSqlSession;  
  21.   
  22.   public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {  
  23.     if (!this.externalSqlSession) {  
  24.       this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);  
  25.     }  
  26.   }  
  27.   
  28.   public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {  
  29.     this.sqlSession = sqlSessionTemplate;  
  30.     this.externalSqlSession = true;  
  31.   }  
  32.  ……  
  33. }  
1.1.1中代码片段为:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  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配置文件中已经配置。

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class CommonDao extends SqlSessionDaoSupport {  
  2.      @Resource  
  3.      public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){  
  4.          super.setSqlSessionFactory(sqlSessionFactory);  
  5.      }  
0 0
原创粉丝点击