zoukankan      html  css  js  c++  java
  • 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;*/
    
          .......
    }

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

  • 相关阅读:
    windows sharepoint service 适配器 使用说明
    Windows SharePoint Services 适配器 启动工作流失败的解决方案。
    编写一个SharePoint 自定义Web服务
    任意输入三个数,获得最大值
    用ASP获取别的网页的内容
    k8s搭建web界面管理rancher
    CRT 远程连接 ubuntu失败
    开源Nginx 文件上传服务器。ngx_upload_module+web.py+gevent+varnish前端缓存
    Esxi 5.1 添加存储设备的问题
    Abp Vnext 中如何统一接口返回值
  • 原文地址:https://www.cnblogs.com/ITPower/p/10016027.html
Copyright © 2011-2022 走看看