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

  • 相关阅读:
    ABP 基于DDD的.NET开发框架 学习(四)时间控件采用datetimepicker注意事项
    解决Vs控制台程序出现NuGetprofile.ps1,因为在此系统上禁止运行脚本错误时或提示:“无法加载文件 .nugetpackagesMicrosoft.EntityFrameworkCore.Tools1.1.0-preview4-final oolsinit.ps1,因为在此系统上禁止运行脚本”
    git 本地初始化项目操作
    php(thinkphp)在linux系统下pdf转png图片【转】
    git学习笔记
    git 2.4.5编译安装
    mysql占用内存高的问题
    vmware下虚拟机centos,root登录时候提示鉴定故障解决方法
    SSH.net之主程序
    SSH.net之Service层
  • 原文地址:https://www.cnblogs.com/leonkobe/p/4280982.html
Copyright © 2020-2023  润新知