返回

Spring Boot 3 集成 MyBatis 不再支持 sqlSessionFactory 与 sqlSessionTemplate

后端

Spring Boot 3 集成 MyBatis:深入解析“Property sqlSessionFactory or sqlSessionTemplate required”错误

背景介绍

在 Spring Boot 3 中,集成 MyBatis 时,你可能会遇到一个恼人的错误:Property sqlSessionFactory or sqlSessionTemplate required。这通常表明配置出现了问题,但解决方法可能并不明显。在这篇博客中,我们将深入探讨这个错误,并提供一个分步指南,帮助你轻松解决它。

了解错误原因

在 Spring Boot 3 之前,sqlSessionFactorysqlSessionTemplate 属性被用来配置 MyBatis,但这些属性现在已不再受支持。因此,当你使用这些属性时,应用程序将无法启动并抛出上述错误。

解决方法:使用 MyBatis Spring Boot Starter

解决此错误的关键在于使用 MyBatis Spring Boot Starter。它提供了 MyBatis 的自动配置,无需手动配置sqlSessionFactorysqlSessionTemplate。要在你的项目中添加它,请在 pom.xml 文件中添加以下依赖项:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

配置数据源

添加依赖项后,你需要配置数据源。你可以使用 Spring Boot 提供的配置属性在 application.yml 文件中进行配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456

编写 MyBatis Mapper

接下来,创建 MyBatis mapper 接口,它将包含你的 SQL 查询和映射语句。在下面的示例中,我们有一个 UserMapper 接口,用于查找用户:

@Mapper
public interface UserMapper {

    @Select("select * from user where id = #{id}")
    User selectUserById(Integer id);

}

在 Service 中使用 MyBatis

最后,在你的 Service 层中,可以使用 MyBatis 的 mapper 接口来操作数据库:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User selectUserById(Integer id) {
        return userMapper.selectUserById(id);
    }

}

结论

通过添加 MyBatis Spring Boot Starter 并正确配置数据源,你可以轻松解决Property sqlSessionFactory or sqlSessionTemplate required错误。这将使你能够在 Spring Boot 3 中无缝集成 MyBatis,并专注于构建你的应用程序。

常见问题解答

1. 我仍然收到错误,即使我添加了 MyBatis Spring Boot Starter 依赖项

检查你的 application.yml 文件,确保数据源已正确配置。

2. 如何在 Spring Boot 3 中手动配置 MyBatis?

不建议手动配置 MyBatis,因为它可能会导致配置错误。使用 MyBatis Spring Boot Starter 更为方便。

3. 我可以在 Spring Boot 3 中使用 MyBatis-Plus 吗?

可以,但你需要使用兼容 Spring Boot 3 的 MyBatis-Plus 版本。

4. 如何解决NestedException: Failed to parse mapping resource错误?

确保你的 MyBatis mapper XML 文件格式正确,并位于正确的路径中。

5. 我在运行集成测试时遇到错误,提示“Error creating bean with name 'sqlSessionFactory'”

将以下依赖项添加到你的测试类:

@ExtendWith(SpringExtension.class)
@DataJpaTest