Spring Boot + MyBatis Plus 项目中,entity和 XML 映射文件的查找机制
在 Spring Boot + MyBatis - Plus 项目中,entity
(实体类)和 XML 映射文件的查找机制有其默认规则,也可通过配置调整,以下详细说明:
一、实体类(entity)的查找
MyBatis - Plus 能找到实体类,主要基于以下默认规则:
- 包扫描:
在项目启动类上,一般会有@MapperScan
注解,例如@MapperScan("com.neuedu.hisweb.mapper")
,它的作用是扫描指定包下的 Mapper 接口。同时,MyBatis - Plus 会根据 Mapper 接口中定义的泛型(如BaseMapper<User>
里的User
),去对应的包路径(通常是与 Mapper 接口有合理包层级关联,或者通过@Entity
、@TableName
等注解配合)中查找实体类。只要实体类的包路径能被合理扫描到(项目的包结构符合 Spring Boot 组件扫描的默认规则,即启动类所在包为基础,扫描其下级包),就可以找到。
比如你的项目启动类在com.neuedu.hisweb
包下,那么com.neuedu.hisweb.entity
包下的实体类,会被自动扫描识别,因为 Spring Boot 默认会扫描启动类所在包及其子包下的组件。 - 注解辅助:
实体类上的@TableName
注解,用于指定该实体类对应的数据库表名,这也帮助 MyBatis - Plus 建立实体类和数据库表的映射关系,在操作数据库时能正确关联。
所以,实体类只要在合理的包路径下(能被 Spring Boot 组件扫描到),无需额外配置就能被找到 ,MyBatis - Plus 会基于 Mapper 接口泛型和包扫描机制定位到它们。
二、XML 映射文件的查找(分两种情况)
情况 1:使用 MyBatis - Plus 且主要用其自带 CRUD ,少用自定义 XML
如果项目中主要使用 MyBatis - Plus 提供的 BaseMapper
自带的 CRUD 方法(如 insert
、selectById
等 ),基本不用自己写 XML 映射文件,此时不需要额外配置 XML 路径,MyBatis - Plus 内部机制可正常工作。
情况 2:有自定义 XML 映射文件(如写复杂 SQL )
若有自定义的 XML 映射文件(比如放在 src/main/resources/mapper
目录,或者和 Mapper 接口同一目录等不同位置 ),默认情况下 MyBatis - Plus 不一定能直接找到,需要配置 mapper - locations
来指定路径 ,常见配置方式如下:
- 在
application.yml
中配置:
mybatis - plus:mapper - locations: classpath:mapper/*.xml # 假设 XML 文件放在 resources/mapper 目录下,根据实际路径调整type - aliases - package: com.neuedu.hisweb.entity # 实体类包路径,让 XML 中可直接用实体类名作为类型别名
- 如果 XML 文件和 Mapper 接口放在同一目录(比如
com/neuedu/hisweb/mapper
下,和xxxMapper.java
放一起 ),需要确保 Maven 打包时能把 XML 文件一起打进classpath
。因为默认 Maven 只会把src/main/resources
下的文件打包,Java 目录下的 XML 可能不会被打包进去,此时需要在pom.xml
中添加资源过滤配置:
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include> <!-- 包含 Java 目录下的 XML 文件 --></includes></resource><resource><directory>src/main/resources</directory></resource></resources>
</build>
然后在 application.yml
中配置:
mybatis - plus:mapper - locations: classpath:com/neuedu/hisweb/mapper/*.xml # 精确指定 XML 所在的包路径(和 Mapper 接口同一目录时)type - aliases - package: com.neuedu.hisweb.entity
总结来说,实体类默认靠合理包扫描就能被找到;XML 映射文件若有自定义的,通常需要配置 mapper - locations
以及注意打包时的资源包含,除非遵循了 MyBatis - Plus 能自动识别的特殊规则(但这种情况较少,一般复杂项目都会有自定义 XML ,需要配置 ) 。你可根据自己项目是否有自定义 XML 映射文件,来判断是否需要额外配置。