我在使用 SpringBoot2 集成 mybatis 的过程中遇到了一个问题

I encountered a problem in the process of integrating mybatis in using SpringBoot2

提问人:yzd11 提问时间:10/5/2023 最后编辑:Artem Bilanyzd11 更新时间:10/5/2023 访问量:53

问:

这是我启动项目时的错误消息

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.

我正在尝试使用 bookMapper 根据 Id 查找书籍信息,但项目显示找不到 BookMapper 组件

这是我的 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
public class BookService {
  @Autowired
  private BookMapper bookMapper;

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

控制器层代码

@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

我做了三次尝试,但没有一次成功。

  1. 我尝试用@MapperScan注释启动项,但它仍然产生报告的错误

    这是一条错误消息。

    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
    

    代码显示我需要sqlSessionFactory或sqlSessionTemplate,但不是springBoot自动配置的,我只是在pom.xml和application.yaml中配置了数据源和连接驱动程序。

  2. 我查看了目标中的文件,发现Mapper文件存在,但是我仍然无法将其注入BookService。

  3. 我尝试将@Repository注释添加到映射器界面,但仍然没有运气。

java spring-boot mybatis

评论

1赞 ave 10/5/2023
要使用 Spring Boot 2.x,Spring 版本必须是 5.x,而不是 6.x。请同时阅读这些文档:mybatis-spring-boot,mybatis-spring我建议对一个简单的框架项目(例如这个存储库中的)进行一些小的更改,而不是从头开始。修复已经搞砸的春季项目并不容易。我们还有更复杂的演示项目_spring-boot
1赞 yzd11 10/5/2023
非常感谢您的帮助,这确实是一个版本问题,我在创建springboot项目时选择了版本为3.x而不是2.x,更改后它已经工作正常了!
0赞 Artem Bilan 10/5/2023
请以后仔细选择问题的标签。 与具体项目有关,而不是软件连接的一般概念:stackoverflow.com/tags/spring-integration/infospring-integration

答: 暂无答案