解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

2025-01-09 16:50

本文主要是介绍解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常...

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文件

如果 程序中这三种情况都没有出现 ,那么,再看看 我遇到的问题。

首先我那个是个单元测试 这个时候我的数据是能出来的,但是。。。。

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

细心的同学可能发现了 如果字段没有加 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.baomXRGlVdzidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.5.1</version>
            </dependency>

一切准备就绪。。。启动。。。

报错。。。。

org.apache.ibatis.binding.BindingException: Invalid bound st编程atement (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-starwww.chinasem.cnter的依赖(或者至少包含了与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 特有的功能(如分页插件、自动填充等),请确保你XRGlVdz已经按照 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/*.xml
  config-location:  classpath:/mybatis/config/mybatis-config.xml

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153006

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma