• spring boot使用注解的方式引入mybatis的SqlSessionDaoSupport


    出现这个问题, 说明一点, 我对spring的注解方式的配置只是知道一个皮毛. 没有深入理解. 有时间要把这部分充充电

    package com.zhike.qizhi.common.dao;
    
    import com.zhike.qizhi.common.page.Pagination;
    
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.support.SqlSessionDaoSupport;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import javax.annotation.Resource;
    
    /*
     * 顶层接口
     */
    @Mapper
    @Repository
    public class ObjectDao<T> extends SqlSessionDaoSupport {
    @Autowired
        private  SqlSessionFactory sqlSessionFactory;
    
        /**
         * 获取对象<br />
         * 对象ID可能为字符串类型也可能为整型等其它类型,故设置为Object类型
         * 
         * @param statement 操作名称
         * @param objectId 对象ID
         * @return 对象
         */
    
            ............
    }

    以前都是通过配置文件配置的mybatis. 现在要迁移到spring boot上都是用注解的方式. 就出现了一个问题, 提示说sqlSesstionFactory不存在. 看源码我知道是因为这个类没有被spring扫描到(因为没有加注解), 所以需要通过@Bean引入引来, 但引入了多次都没有成功. 最后参考多篇文章, 成功了. 

    主要参考:

    https://blog.csdn.net/weixin_36795183/article/details/79043307

    http://www.cnblogs.com/liaoguanwang/p/9769976.html

    ======================================================================

    具体操作如下, 一共两步骤:

    1. 定义一个mybatis的配置文件类

    @Configuration
    public class MybatisConfiguration implements TransactionManagementConfigurer{
    
        @Autowired
        private DataSource dataSource;
    
        // 提供SqlSeesion
        @Bean
        public SqlSessionFactory sqlSessionFactory() throws Exception {
            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            return sessionFactory.getObject();
        }
    
        @Bean
        public PlatformTransactionManager annotationDrivenTransactionManager() {
            return new DataSourceTransactionManager(dataSource);
        }
    
    }

    2. 在ObjectDao引入的时候, 使用如下方法

    *
     * 顶层接口
     */
    @Mapper
    @Repository
    public class ObjectDao<T> extends SqlSessionDaoSupport {
    
        @Resource
        public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
            super.setSqlSessionFactory(sqlSessionFactory);
        }
    
        /*@Autowired
        private  SqlSessionFactory sqlSessionFactory;*/
    
          .......
    }

    具体原因: 参考上面的第一篇文章

  • 相关阅读:
    安装Eclipse for MAC 苹果版
    visual studio code emmet 插件不提示?解决方案
    支付宝付款页面调整屏幕亮度
    浅谈iOS需要掌握的技术点
    Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
    ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(-)
    ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)
    个人中心模块-拍照剪裁上传
    利用js与java交互
    显示gif动画(帧动画的播放)
  • 原文地址:https://www.cnblogs.com/ITPower/p/10016027.html
Copyright © 2020-2023  润新知