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