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();
}

三、排查顺序

  1. 依赖是否包含 mybatis starter。
  2. 启动类或 Mapper 是否加了扫描注解。
  3. 包路径是否写对。
  4. 数据源是否已配置并能连接。
标签
Spring BootMyBatis报错