出現這個問題, 說明一點, 我對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;*/ ....... }
具體原因: 參考上面的第一篇文章