当前位置: 首页 > news >正文

关于 mybatis-plus-boot-starter 与 mybatis-spring-boot-starter 的错误

不是知道你是否 出现过这样的错误

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 

经过各种度娘,无非就是让你检查三种情况

情况一:mapper.xml没有按照传统的maven架构进行放置
情况二:mybatis的配置信息出错
情况三:idea的编译问题,idea有的时候没有编译生成相应的xml。在idea的target->classes下面没有找到相应的存在xml的文件夹,该文件夹里面有没有对应的mapper(实体名).xml文件

这里不再赘述,可以观看其他连接例如 https://www.jianshu.com/p/a9516bcd3cb0 如果这三种情况足以解决你的问题 ,那么你可以不用浪费时间在往下看。

如果 程序中这三种情况都没有出现 ,那么,再看看 我遇到的问题。
首先我那个是个单元测试 这个时候我的数据是能出来的,但是。。。。

在这里插入图片描述
细心的同学可能发现了 如果字段没有加 as做别名映射,实体类字段是不能被赋值的。
于是🤔,是不是实体类上加上@TableName @TableField 就好了,于是我加上了。。。
此时我引用的依赖是

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>

但是 @TableName @TableField 的包是com.baomidou.mybatisplus.annotation里边的 所以要更改引用依赖

            <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency>

一切准备就绪。。。😏启动。。。🙂‍↔️
报错。。。。😳

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.cdliker.infrastructure.persistent.dao.IAwardDao.getAwardPOList 

于是 排查了三种情况,都不符合。所以目标就锁定了 依赖上,

mybatis-plus-boot-starte 与mybatis-spring-boot-starter的区别

1. 功能与特性
mybatis-plus-boot-starter:

自动配置:
能够自动配置MyBatis-Plus,减少手动配置的工作量。
CRUD操作简化:提供了一套默认的Service和Mapper实现,使得CRUD操作更加简便,减少了大量的样板代码。
动态SQL:支持动态SQL,提供了丰富的查询功能,使得构建复杂查询变得更加容易。
代码生成器:内置代码生成器,可以快速生成Entity、Mapper、Mapper XML、Service、ServiceImpl、Controller等代码,提高开发效率。
分页插件:提供分页插件,支持一键分页,简化分页查询的实现。
性能分析插件:提供性能分析插件,可以分析SQL执行性能,帮助优化SQL查询。
扩展性:提供了丰富的扩展点,允许开发者根据需要进行自定义扩展。
与Spring Boot集成:无缝集成Spring Boot,无需额外的配置,易于使用。

mybatis-spring-boot-starter:

自动配置:支持MyBatis的自动配置,包括数据源、SqlSessionFactory和Mapper扫描等。
简化配置:通过Spring Boot的自动配置特性,大大简化了MyBatis的配置过程。
常用功能:提供了配置数据源、生成MyBatis的SqlSessionFactory、扫描Mapper文件等常用功能。
与Spring Boot协同工作:使MyBatis和Spring Boot更加容易协同工作,提高开发效率。

2. 使用场景

mybatis-plus-boot-starter:更适用于需要快速开发、简化CRUD操作、提高开发效率的Spring Boot项目。它提供了更多高级特性和扩展点,适合对数据库操作有较多定制需求的场景。
mybatis-spring-boot-starter:适用于需要将MyBatis框架集成到Spring Boot项目中的基本场景。它提供了基本的自动配置和常用功能,适合对数据库操作要求不是特别复杂或需要快速集成的项目。

3. 依赖关系

值得注意的是,mybatis-plus-boot-starter在其内部已经包含了mybatis-spring-boot-starter的依赖(或者至少包含了与MyBatis集成所需的关键依赖),因此在大多数情况下,如果你选择了mybatis-plus-boot-starter,就无需再额外引入mybatis-spring-boot-starter。这也是为什么在一些项目中,同时引入这两个starter时,移除其中一个并不会对项目运行造成影响的原因。

综上所述,mybatis-plus-boot-starter和mybatis-spring-boot-starter在功能和特性上有所区别,选择哪个启动器主要取决于你的项目需求和对数据库操作的具体要求。如果你需要更多的高级特性和扩展性,可以选择mybatis-plus-boot-starter;如果你只是需要基本的MyBatis集成功能,那么mybatis-spring-boot-starter就足够了。

🤔 正常的三种情况 出发点都是扫描的问题,难道问题还在扫描?既然mybatis-plus包含mybatis 那么。。。

mybatis-plus-boot-starter 时遇到 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 这样的错误,而切换到 mybatis-spring-boot-starter 后错误消失,这通常意味着 MyBatis 或 MyBatis-Plus 在寻找或解析 Mapper 接口与其对应的 XML 映射文件时出现了问题。可能会出现以下情况

1.Mapper 接口与 XML 映射文件的位置或命名不匹配:

确保 Mapper 接口和 XML 映射文件位于正确的包路径下,并且文件名与接口名匹配(去掉接口名中的 I 前缀,并加上 .xml 后缀)。
检查 XML 映射文件的 namespace 是否与 Mapper 接口的全限定名完全一致。

2.Mapper 扫描路径未正确配置:

在 Spring Boot 配置中,确保你已经正确配置了 Mapper 扫描路径。这可以通过 @MapperScan 注解或在 application.properties/application.yml 文件中设置 mybatis-plus.mapper-locations 来实现。
如果你的 Mapper 接口和 XML 文件位于不同的包路径下,你需要确保 @MapperScan 注解或配置属性包含了所有这些路径。
XML 映射文件未正确放置在资源目录中:
确保 XML 映射文件被放置在 Spring Boot 项目的资源目录(如 src/main/resources)中,并且其路径与 Mapper 接口的路径相对应。

3.依赖冲突:

检查你的项目依赖,确保没有引入多个版本的 MyBatis 或 MyBatis-Plus,这可能会导致类加载器加载了错误的类。
如果你的项目中同时包含了 mybatis-spring-boot-starter 和 mybatis-plus-boot-starter,确保只保留一个,因为它们是互斥的。
Spring Boot 的自动配置问题:
有时候,Spring Boot 的自动配置可能不会按预期工作。尝试在 application.properties/application.yml 中显式配置 MyBatis-Plus 的相关属性,或者在你的配置类中手动配置 SqlSessionFactory 和 MapperScannerConfigurer。

4.检查 MyBatis-Plus 特有的配置:

如果你在使用 MyBatis-Plus 特有的功能(如分页插件、自动填充等),请确保你已经按照 MyBatis-Plus 的要求进行了配置。

5.IDE 或构建工具的问题:

有时候,IDE(如 IntelliJ IDEA 或 Eclipse)或构建工具(如 Maven 或 Gradle)可能没有正确更新或同步你的项目配置。尝试重启 IDE、重新构建项目或清理并重新导入 Maven/Gradle 依赖。

6.查看日志和错误堆栈:

仔细查看错误堆栈和 Spring Boot 的启动日志,可能会有更多关于为什么 MyBatis 找不到绑定语句的线索。

🤯 配置,配置 application.properties/application.yml 文件中设置 mybatis-plus.mapper-locations 来实现
在使用 mybatis-spring-boot-starter 的时候 使用

mybatis:mapper-locations: classpath:/mybatis/mapper/*.xmlconfig-location:  classpath:/mybatis/config/mybatis-config.xml

在使用 mybatis-plus-boot-starter 的时候 使用

mybatis-plus:mapper-locations: classpath:/mybatis/mapper/*.xmlconfig-location:  classpath:/mybatis/config/mybatis-config.xml

end … 🥵

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 快速理解TCP协议(一)——TCP协议深度解析
  • Ubuntu20.04 搜索不到任何蓝牙设备
  • 微软宣布弃用面向企业的WSUS更新服务 仍然保留该服务但不再添加任何新功能
  • 50页PPT麦肯锡精益运营转型五步法
  • Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示
  • 只装了WPS,DOC文档无法打开
  • 第二章 SpringBoot环境下yml和properties的几种玩法
  • 美信监控易的优势:长期稳定运行
  • 让AI激发创作力:OpenAI分享5位专业作家利用ChatGPT写作的案例技巧
  • JSP 指令标识和脚本标识的使用
  • 828 华为云征文|华为 Flexus 云服务器搭建 SamWaf 开源轻量级网站防火墙
  • 快速搭建Kubernetes集群
  • SpringBoot3核心特性-核心原理
  • 【已解决】使用JAVA实现递归算法-从自然数中取3个数进行组合之循环算法
  • Vue3教程 - 1 Vue简介
  • 【Leetcode】104. 二叉树的最大深度
  • 【刷算法】从上往下打印二叉树
  • 345-反转字符串中的元音字母
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular Elements 及其运作原理
  • github从入门到放弃(1)
  • JS函数式编程 数组部分风格 ES6版
  • PHP那些事儿
  • 从0到1:PostCSS 插件开发最佳实践
  • 翻译:Hystrix - How To Use
  • 回顾2016
  • 将 Measurements 和 Units 应用到物理学
  • 利用jquery编写加法运算验证码
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 问题之ssh中Host key verification failed的解决
  • 详解移动APP与web APP的区别
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 智能合约Solidity教程-事件和日志(一)
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 说说我为什么看好Spring Cloud Alibaba
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • (06)金属布线——为半导体注入生命的连接
  • (35)远程识别(又称无人机识别)(二)
  • (备忘)Java Map 遍历
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (十八)三元表达式和列表解析
  • (四)c52学习之旅-流水LED灯
  • (四)事件系统
  • (一) storm的集群安装与配置
  • (一)插入排序
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法