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

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语句所需的配置。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享