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

  • 相关阅读:
    npm 升级所有依赖包
    React中使用 ref 和 findDomNode
    流程控制语句
    Linux 各大目录详解 及 目录颜色详解
    python语言初识(红桃三)
    Linux 虚拟机安装及网络配置
    linux系统介绍
    计算机的五大部件
    Vue生命周期
    Vue实现模糊搜索
  • 原文地址:https://www.cnblogs.com/leonkobe/p/4280982.html
Copyright © 2020-2023  润新知