zoukankan      html  css  js  c++  java
  • mybatis-sparing- 1.1.1 和1.1.2版本的区别

    (Dao层继承SqlSessionDaoSupport 需要将spring注解扫描打开,SqlSessionDaoSupport 采用了注解的方式注入sqlsessionTemplete)
    之前一直使用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中代码片段为:

    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);
    }

  • 相关阅读:
    (转)位置无关码、位置有关码
    【转载】PM为什么会存在?怎么存在?
    战略是什么?3-互联网产品行业以及竞争对手分析
    【转载】2014,要格外留意这7大投资机会——哈继铭 {key:人口红利、房价、社会结构、贸易逆差}
    2014年书单-30本
    产品经理要树立战略意识——战略是什么2(谈国家限制支付宝的战略分析)
    产品经理要树立战略意识——战略是什么1
    【转载】产品经理入门案例分析——锤子手机策略
    javascript设计模式-工厂模式
    javascript设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/leonkobe/p/4280982.html
Copyright © 2011-2022 走看看