出现这个问题, 说明一点, 我对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;*/
.......
}
具体原因: 参考上面的第一篇文章