返回

一招搞定SpringBoot 多模块集成MyBatis的mapper路径配置

后端

SpringBoot 多模块集成 MyBatis:告别 Mapper 路径配置烦恼

简介

在 SpringBoot 多模块项目中集成 MyBatis,一个常见的挑战是如何正确配置 Mapper 路径。本文将深入探讨 MyBatis 配置的细节,并提供一步步的解决方案,帮助您轻松解决 Mapper 找不到的问题。

Mapper 配置

要配置 MyBatis,需要在每个模块中遵循以下步骤:

  1. 添加 MyBatis 依赖项:
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>
  1. 创建 mybatis-config.xml 文件:

在每个模块的 resources 文件夹下,创建 mybatis-config.xml 文件,其中包含 MyBatis 的基本设置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <settings>
        <setting name="cacheEnabled" value="true" />
        <setting name="lazyLoadingEnabled" value="true" />
        ...
        <setting name="defaultExecutorType" value="SIMPLE" />
        <setting name="defaultStatementTimeout" value="25000" />
    </settings>
</configuration>
  1. 创建 Mapper.xml 文件:

在每个模块的 mapper 文件夹下,创建相应的 Mapper.xml 文件,其中包含 SQL 语句:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" resultType="com.example.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
  1. 配置 application.properties:

在每个模块的 application.properties 文件中,配置 MyBatis 的属性:

# MyBatis 配置
mybatis.configuration.default-statement-timeout=25000
mybatis.configuration.default-fetch-size=100
...
mybatis.mapper-locations=classpath:mybatis/*/*.xml

启动类配置

在每个模块的启动类中,添加以下代码:

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource());
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/*/*.xml"));
        return factoryBean.getObject();
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
}

通过上述步骤,您可以轻松配置 MyBatis,并解决 Mapper 路径配置问题。

常见问题解答

1. 启动应用时找不到 Mapper 文件:

检查 mapper-locations 配置是否正确,是否包含了所有需要的 Mapper.xml 文件。

2. 使用动态 SQL 时出现解析错误:

升级 MyBatis 版本到最新版本。

3. 使用 @Param 注解找不到参数:

在 Mapper 接口中添加 @Param 注解。

4. 如何使用 Maven 依赖项管理 MyBatis:

在 pom.xml 中添加以下依赖项:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

5. 如何自定义 MyBatis 的日志记录:

在 logback.xml 或 log4j2.xml 配置文件中配置 MyBatis 的日志记录器。

结论

通过遵循本指南,您可以轻松集成 MyBatis 并解决 SpringBoot 多模块项目中常见的 Mapper 路径配置问题。通过灵活的配置选项和强大的功能,MyBatis 可以显著提高您的应用程序的性能和可扩展性。