Spring Boot中@Mapper、@MapperScan和mybatis.mapper-locations配置有何区别?(配置.有何区别.Mapper.Boot.Spring...)

wufei123 发布于 2025-03-14 阅读(12)

spring boot中@mapper、@mapperscan和mybatis.mapper-locations配置有何区别?

Spring Boot集成MyBatis时,@Mapper、@MapperScan注解和mybatis.mapper-locations配置参数如何协同工作?

在Spring Boot与MyBatis的整合项目中,Mapper接口的配置至关重要。本文将详细分析@Mapper、@MapperScan注解以及mybatis.mapper-locations配置文件参数之间的区别,并解释为什么仅使用注解可能导致org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误。

该错误提示表明MyBatis找不到对应的SQL映射语句,通常是因为Mapper接口对应的XML配置文件未能正确加载。

@Mapper注解作用于单个Mapper接口,告知Spring将其注册为MyBatis的Mapper接口,并创建代理对象。该代理对象负责将接口方法调用转换为数据库操作。

@MapperScan注解则用于扫描指定包下所有Mapper接口,批量完成@Mapper注解的功能,自动查找并注册所有标注为@Mapper的接口。

mybatis.mapper-locations=classpath:mapper/*.xml配置参数指定了MyBatis XML映射文件的位置。MyBatis依赖这些XML文件中的SQL语句执行数据库操作。@Mapper和@MapperScan仅负责将接口与MyBatis框架连接,自身不包含SQL语句信息,MyBatis需要XML文件获取具体的SQL语句。

因此,仅使用@Mapper或@MapperScan注解,MyBatis虽然能找到Mapper接口,但找不到对应的SQL映射文件(XML文件),从而导致Invalid bound statement错误。只有在application.properties或application.yml中配置了mybatis.mapper-locations,指定了XML文件的路径,MyBatis才能正确加载SQL映射文件并完成数据库操作。

它们并非冗余配置,而是分工明确:前两者负责Mapper接口的注册,后者负责提供MyBatis执行SQL语句所需的配置信息。 前两者建立接口与MyBatis框架的关联,后者提供MyBatis执行SQL语句所需的配置。

以上就是Spring Boot中@Mapper、@MapperScan和mybatis.mapper-locations配置有何区别?的详细内容,更多请关注知识资源分享宝库其它相关文章!

标签:  配置 有何区别 Mapper 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。