Mybatis - Springboot程序里 (情景分析),怎么注入Mybatis的 XML映射文件
1. 添加依赖
确保
pom.xml 或 build.gradle 中包含 MyBatis 的 Spring Boot 集成依赖:<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2. 配置 XML 映射文件路径
在
application.yml 或 application.properties 中指定 XML 文件的位置:mybatis:
mapper-locations: classpath:mapper/**/*.xml # 关键配置
configuration:
map-underscore-to-camel-case: true # 可选:自动驼峰命名
- 路径说明:
classpath:mapper/**/*.xml:表示从resources/mapper目录及其子目录加载所有 XML 文件。- 如果 XML 文件直接放在
resources/mapper目录下,可简写为classpath:mapper/*.xml。
3. 创建 XML 映射文件
在
src/main/resources/mapper 目录下创建 XML 文件(例如 UserMapper.xml),并配置命名空间指向对应的 Mapper 接口:<?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.dao.UserDao"> <!-- 必须与 Mapper 接口全限定名一致 -->
<select id="findById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
4. 定义 Mapper 接口
创建对应的 Java 接口(无需注解,但需与 XML 的
namespace 一致):public interface UserDao { // 无需 @Mapper 注解(通过 @MapperScan 扫描)
User findById(Long id); // 方法名需与 XML 中的 id 一致
}
5. 启用 Mapper 扫描
在启动类上添加
@MapperScan,指定 Mapper 接口所在的包:@SpringBootApplication
@MapperScan("com.example.dao") // 扫描包下的所有 Mapper 接口
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6. 注入并使用 Mapper
在 Service 或 Controller 中直接注入 Mapper 接口:
@Service
public class UserService {
@Autowired
private UserDao userDao; // 自动注入
public User getUser(Long id) {
return userDao.findById(id);
}
}
常见问题排查
问题 1:XML 文件未加载
- 表现:调用方法时报错
Invalid bound statement (not found)。 - 解决:
- 检查
mybatis.mapper-locations路径是否与 XML 文件的实际位置匹配。 - 确保 XML 文件在
resources目录下且被正确打包到 JAR 中(解压 JAR 后查看路径)。
- 检查
问题 2:命名空间或方法名不匹配
- 表现:报错
BindingException: Mapper method not found。 - 解决:
- 检查 XML 中的
namespace是否与 Mapper 接口的全限定名一致。 - 确认 XML 中的 SQL 语句
id与方法名一致。
- 检查 XML 中的
问题 3:XML 语法错误
- 表现:启动时报
XML parse error。 - 解决:
- 检查 XML 文件的 DTD 声明和标签闭合。
- 使用 IDE 的 XML 校验工具(如 IntelliJ 的自动提示)。
完整示例目录结构
src/main/java/
└─ com/example/
├─ dao/
│ └─ UserDao.java # Mapper 接口
├─ model/
│ └─ User.java # 实体类
└─ Application.java # 启动类
src/main/resources/
├─ mapper/
│ └─ UserMapper.xml # XML 映射文件
└─ application.yml
总结
- 核心配置:
mybatis.mapper-locations+@MapperScan。 - 关键规则:
- XML 的
namespace必须对应 Mapper 接口的全限定名。 - XML 的 SQL
id必须与接口方法名一致。
- XML 的
- 推荐实践:将 XML 和 Mapper 接口放在同名包下(如
resources/mapper/com/example/dao对应java/com/example/dao),但需调整mapper-locations路径。
浙公网安备 33010602011771号