java
技术随笔
Spring Boot 报错:Property sqlSessionFactory or sqlSessionTemplate are required 解决
项目引入 MyBatis / MyBatis-Plus 后启动报错 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required,本质是 Mapper 接口没有被正确扫描、数据源未就绪,或依赖不完整。下面按出现频率给出解决办法。
一、根因分析
sqlSessionFactory 是 MyBatis 操作数据库的核心工厂。当 Spring 容器创建 Mapper 时找不到它,通常说明:Mapper 接口未被扫描、数据源没有配置,或 mybatis starter 依赖缺失。
二、解决方案
1. 确保引入了正确的 starter
org.mybatis.spring.boot mybatis-spring-boot-starter 2.3.1
使用 MyBatis-Plus 则引入 mybatis-plus-boot-starter。
2. 扫描 Mapper 接口
方式一:在启动类上指定扫描路径:
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {}
方式二:在每个 Mapper 接口上添加 @Mapper 注解。路径要与项目包结构一致,包名写错会导致扫描不到。
3. 配置数据源
该报错常常和“Failed to configure a DataSource”同时出现。先按数据源配置补齐 spring.datasource.*,再回来处理 Mapper 扫描。
4. 多数据源场景
多数据源时需要为每个 SqlSessionFactory 显式指定数据源与 Mapper 路径,不能依赖自动配置:
@Bean
public SqlSessionFactory sqlSessionFactory(@Qualifier("ds1") DataSource ds) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(ds);
return bean.getObject();
}
三、排查顺序
- 依赖是否包含 mybatis starter。
- 启动类或 Mapper 是否加了扫描注解。
- 包路径是否写对。
- 数据源是否已配置并能连接。