Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

来源:互联网 发布:电脑视频剪辑软件推荐 编辑:程序博客网 时间:2024/05/18 01:03


之前一直使用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.

</pre><pre name="code" class="java">/** * 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中代码片段为:

public abstract class SqlSessionDaoSupport extends DaoSupport {    private SqlSession sqlSession;    private boolean externalSqlSession;    @Autowired(required = false)    public final void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {        if (!this.externalSqlSession) {            this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);        }    }    @Autowired(required = false)    public final void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {        this.sqlSession = sqlSessionTemplate;        this.externalSqlSession = true;    }    ……}

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

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

public class CommonDao extends SqlSessionDaoSupport {     @Resource     public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){         super.setSqlSessionFactory(sqlSessionFactory);     }
原文: http://www.cnblogs.com/hawk0035/p/3337283.html?utm_source=tuicool

3 1