前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring boot使用注解的方式引入mybatis的SqlSessionDaoSupport

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

作者头像
用户7798898
发布2020-09-27 16:24:26
6630
发布2020-09-27 16:24:26
举报

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

代码语言:javascript
复制
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的配置文件类

代码语言:javascript
复制
@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引入的时候, 使用如下方法

代码语言:javascript
复制
*
 * 顶层接口
 */
@Mapper
@Repository
public class ObjectDao<T> extends SqlSessionDaoSupport {

    @Resource
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
        super.setSqlSessionFactory(sqlSessionFactory);
    }

    /*@Autowired
    private  SqlSessionFactory sqlSessionFactory;*/

      .......
}

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档