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;*/

      .......
}

具體原因: 參考上面的第一篇文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM