You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot2整合MyBatis时BookMapper无法注入的问题求助

SpringBoot2整合MyBatis注入BookMapper失败问题排查与解决

问题现象

项目启动时报错,提示找不到BookMapper类型的Bean:

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-10-05T18:47:51.471+08:00 ERROR 26348 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

Field bookMapper in com.yzd.boot.service.BookService required a bean of type 'com.yzd.boot.mapper.BookMapper' that could not be found.

The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'com.yzd.boot.mapper.BookMapper' in your configuration.

相关代码片段

Mapper接口

@Mapper
public interface BookMapper {
  public Book getBook(Integer bookId);
}

BookMapper.xml

<mapper namespace="com.yzd.boot.mapper.BookMapper">
<!--    public Book getBook(Integer bookId);-->
    <select id="getBook" resultType="com.yzd.boot.bean.Book">
        select * from t_book where book_id = #{bookId}
    </select>
</mapper>

Service层

@Service
public class BookService {
  @Autowired
  private BookMapper bookMapper;

  public Book getBook(Integer bookId){
    Book book = bookMapper.getBook(bookId);
    return book;
  }
}

Controller层

@Controller
public class IndexController {
  @Autowired
  private BookService bookService;
  

  @ResponseBody
  @RequestMapping("/acct")
  public Book getBook(@RequestParam("id") Integer id){
    Book book = bookService.getBook(id);
    return book;
  }

}

application.yaml配置

#Two rules of MyBatis
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

已尝试的无效方案

  • 在启动类添加@MapperScan注解,报错提示需要sqlSessionFactory或sqlSessionTemplate:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookMapper' defined in file [D:\code-storage\idea\java\boot02-web-dev\target\classes\com\yzd\boot\mapper\BookMapper.class]: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[spring-beans-6.0.11.jar:6.0.11]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:713) ~[spring-beans-6.0.11.jar:6.0.11]
... 39 common frames omitted

  • 检查target目录确认Mapper文件存在,问题依旧
  • 在Mapper接口添加@Repository注解,无效

有效解决方案

方案1:确保使用MyBatis SpringBoot Starter依赖

SpringBoot2整合MyBatis必须使用官方starter,而非单独引入MyBatis核心包,starter会自动配置SqlSessionFactory等核心Bean。在pom.xml中添加:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.1</version> <!-- 适配SpringBoot2.x的稳定版本 -->
</dependency>

方案2:补全数据源配置

SpringBoot无法自动创建SqlSessionFactory的核心原因通常是缺失数据源配置,在application.yaml中添加完整的数据库连接信息:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: 数据库用户名
    password: 数据库密码
    driver-class-name: com.mysql.cj.jdbc.Driver

方案3:修正@MapperScan扫描路径

若使用@MapperScan,需确保扫描路径精确覆盖Mapper接口所在包:

@SpringBootApplication
@MapperScan("com.yzd.boot.mapper") // 精确指向Mapper接口所在的包
public class Boot02WebDevApplication {
    public static void main(String[] args) {
        SpringApplication.run(Boot02WebDevApplication.class, args);
    }
}

方案4:移除冲突的MyBatis自定义配置

若没有特殊自定义需求,可直接删除application.yaml中的config-location配置,避免自定义mybatis-config.xml覆盖SpringBoot的自动配置逻辑。

验证步骤

  1. 清理target目录,重新编译项目
  2. 启动项目,确认无Bean找不到的报错
  3. 调用/acct?id=1接口,验证查询功能正常

内容的提问来源于stack exchange,提问作者yzd11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:05:11