基于SpringBoot3从零配置MybatisPlus

news2025/1/13 16:42:18

基于SpringBoot3从零配置MybatisPlus记录

文章目录

  • 1.环境
  • 2.表数据准备
  • 3. 配置
    • pom配置
    • yml 配置
    • @MapperScan
  • 3.问题总结
    • 问题1: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    • 问题2:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
    • mapper-locations如何配置:
    • 最终解决方案

1.环境

  • SpringBoot 3.0.6
  • Mysql 8.0
  • JDK 17

2.表数据准备

CREATE TABLE `ya_user` (
	`id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
	`user_id` VARCHAR ( 32 ) NOT NULL COMMENT '账号',
	`user_name` VARCHAR ( 64 ) NOT NULL COMMENT '用户名',
	`user_password` VARCHAR ( 32 ) NOT NULL COMMENT '密码',
	PRIMARY KEY ( `id` ),
	UNIQUE KEY `uk_user_id` ( `user_id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '用户表';

INSERT INTO `ya_user` ( `user_id`, `user_name`, `user_password` )
VALUES ( 'ya', '阿雅', '123456' );

3. 配置

pom配置

注意mybatis-plus版本号为mybatis-plus 3.5.3.1。
我刚开始使用的版本号为3.5.1一直有问题,见文末的问题总结。

<dependencies>
     ...
     <!-- mybatis-plus -->
     <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.5.3.1</version>
     </dependency>
    <!-- mysql driver -->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.25</version>
     </dependency>
     ...
</dependencies>
<build>
    <resources>
	   <!-- xml放在java目录下-->
	    <resource>
	        <directory>src/main/java</directory>
	        <includes>
	            <include>**/*.xml</include>
	        </includes>
	    </resource>
	    <resource>
	        <directory>src/main/resources</directory>
	    </resource>
	</resources>
	...
</build>

yml 配置

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath*:com/ya/boottest/**/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

@MapperScan

@MapperScan("com.ya.boottest.**.mapper")
** 可以模糊匹配数个中间数个文件夹
我的目录结构是这样的:有mp自动生成的mapper,有自己手写sql使用的mapper(二者也可以用一个,看个人习惯),这样写,两个文件夹的mapper都能扫描到
启动类上使用@MapperScan 和接口上的@Mapper至少要使用一个,否则启动时就会报错:
Error creating bean with name ‘yaUserServiceImpl’:
Unsatisfied dependency expressed through field ‘baseMapper’:
No qualifying bean of type ‘com.ya.boottest.user.autoCode.mapper.YaUserMapper’ available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}

在这里插入图片描述

3.问题总结

Attention:下述的xml,yml都是试错过程中的记录,完整的、正确的配置都在上文↑。

问题1: Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required

在mybatis-plus使用3.5.1的情况下,会报错:
Error creating bean with name ‘yaUserMapper’ defined in file [D:\workspace\personal\boot-test\target\classes\com\ya\boottest\user\autoCode\mapper\YaUserMapper.class]:
Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required

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

还要额外引入:

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

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

在引入了上述依赖后,项目正常启动,但是在使用mapper查询时,会报错:
[Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ya.boottest.user.mapper.UserMapper.listUser] with root cause
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ya.boottest.user.mapper.UserMapper.listUser

绑定异常,mapper接口和mapper.xml文件没有映射绑定成功。
这里浪费了我大量时间。

  • 首先,我的mapper和xml文件命名一致,这个无须怀疑。

  • mapper的namespace和select的resultType也很基础,没有问题。
    在这里插入图片描述

  • 其次,虽然我的xml文件在java目录,没有在resources目录中,但是我在pom文件中做了处理

      <!-- xml放在java目录下-->
      <resource>
          <directory>src/main/java</directory>
          <includes>
              <include>**/*.xml</include>
          </includes>
      </resource>
  • 我怀疑是我yml里mapper-locations配置的问题,导致扫描不到。

mapper-locations如何配置:

我特意去恶补了 关于classpath的知识
参考文章:/和/和/**的区别;classpath和classpath的区别

classpath*可以匹配多个路径下的多个文件
**可以模糊匹配中间多级路径
*.xml可以模糊匹配所有xml文件

我的yml配置,应该是没错的。

mybatis-plus:
  mapper-locations: classpath*:com/ya/boottest/**/*.xml

最终解决方案

在我苦思冥想,自己究竟哪里不行,甚至怀疑SpringBoot3到底能不能用mybatis的时候
我在这篇文章Spring Boot 3.x- MybatisPlus集成的评论区找到了解决之法!
在这里插入图片描述

这是一个我觉得很完美的解决办法,既解决了我问题2中的报错,也一并解决了我问题1中的需要额外引入mybatis-spring-boot-starter的问题。

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

至此,问题解决:
res1

res2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习13:说句心里话 A(python123)

描述 分两次从控制台接收用户的两个输入&#xff1a;第一个内容为"人名"&#xff0c;第二个内容为"心里话"。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪…

使用D435i深度相机运行ORB-SLAM3

下载安装链接 下载ORB-SLAM3地址&#xff1a; git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git eigen3多版本安装&#xff1a;https://blog.csdn.net/weixin_41756645/article/details/129570141 ORB-SLAM2中eigen3版本为&#xff1a;3.2.10版本 ORB-SLAM3中eigen3版…

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

文章目录 一、ViewModel LiveData DataBinding 核心要点1、ViewModel 使用要点2、LiveData 使用要点3、DataBinding 使用要点 二、ViewModel LiveData DataBinding 代码示例1、ViewModel LiveData 代码2、build.gradle 构建脚本 - 启用 DataBinding3、DataBinding 布局文件…

ChatGPT实战100例 - (10) 提前体验ChatGPT的多模态绘图功能

文章目录 ChatGPT实战100例 - (10) 提前体验ChatGPT的多模态绘图功能一、需求与思路二、基本调教三、开始秀四、 总结 ChatGPT实战100例 - (10) 提前体验ChatGPT的多模态绘图功能 这个绘图其实比较基础&#xff0c;只能说是能显示个图吧 真要出图&#xff0c;隔壁 文心一言 秒杀…

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量 提高三维模型从OSGB格式转换为3DTILES格式的转换速度和数据质量&#xff0c;可以从以下几个方面进行优化&#xff1a; 1、选用高效的转换工具&#xff1a;选择高效的转换工具是提高转换速度和数据质量的关键。目前市…

.NET中比肩System.Text.Json序列化反序列化组件MessagePack

简介 官方定义&#xff1a;MessagePack是一种高效的二进制序列化格式。它允许您像JSON一样在多个语言之间交换数据。但是它更快并且更小。 MessagePack是一种开源的序列化反序列化组件&#xff0c;可支持JAVA&#xff0c;C#等主流语言。在 C# 中使用 MessagePack&#xff0c…

javaScript:cropperjs是一款非常强大却又简单的图片裁剪工具

cropperjs是一款非常强大却又简单的图片裁剪工具&#xff0c;它可以进行非常灵活的配置&#xff0c;支持手机端使用&#xff0c;支持包括IE9以上的现代浏览器。&#xff08;关键是使用方法简单&#xff0c;几行代码就可以搞定&#xff09; 官方github文档&#xff1a;GitHub -…

深入理解计算机系统--理解编译器编译的过程

前言 大家在学习C语言的时候&#xff0c;相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是&#xff1a;预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中&#xff0c;编译器究竟做了那些工作&#xff0c;它是如何让一份高级程序转换成机器语言的…

USB 转 4 串口芯片 CH9104

CH9104 是一款USB总线的转接芯片&#xff0c;支持最高6M波特率与硬件流控&#xff0c;支持USB配置功能&#xff0c;提供RS485方向控制与GPIO等信号引脚&#xff0c;可实现PC等平台扩展多串口或多个串口设备升级成USB口。CH9104实现 USB 转四个异步串口 UART0/1/2/3 功能&#x…

Docker 在Linux-CentOS上的安装使用

Linux CentOS 虚拟机安装及与windows远程登录_XiaoGuaiSs的博客-CSDN博客 一、如果安装过程有兼容问题&#xff0c;执行更新 yum 包&#xff08;生产环境中此步操作需慎重&#xff09; 注意​ yum -y update&#xff1a;升级所有包同时也升级软件和系统内核&#xff1b;​ …

计讯物联智能虫情测报系统,保障粮食安全的守卫者

计讯物联农业虫情监测系统 夏天是粮食作物生长关键期&#xff0c;也是农作物病虫害高发期。因此&#xff0c;预防农作物病虫害在生产过程中是至关重要的环节。作为智慧农业的先行者&#xff0c;计讯物联以预防为主、综合防治为设计理念&#xff0c;利用先进的现代光、电、数控技…

Android、Android Studio 和 Gradle 是如何使用 Java 的

目录 Java平台JRE虚拟机JDKAndroid Studio 如何使用 JavaGradle 如何使用 JavaAndroid Gradle 插件从命令行执行 Gradle 构建Android 设备上是如何使用 Java 的 可以肯定地说&#xff0c;每个人都知道 Android 使用 Java。然而&#xff0c;“使用 Java ”的含义范围相当大。因此…

ROS学习8:ROS机器人平台设计

【Autolabor初级教程】ROS机器人入门 1. 电机与电机驱动板 1.1 直流减速电机 电机主体通过输入轴与减速箱相连接&#xff0c;通过减速箱的减速效果&#xff0c;最终外端的输出轴会按照比例 (取决于减速箱减速比) 降低电机输入轴的转速&#xff0c;当然速度降低之后&#xff0…

effective c++ item35-39

item35:考虑虚函数的替代方案 NVI----Non-Virtual Interface 不使用虚函数接口&#xff0c;子类也可以实现按需求更改实现&#xff1a; The Strategy Pattern via Function Pointers 也可以使用函数指针 或者使用stl::function The “Classic” Strategy Pattern item…

手术麻醉信息管理系统源码,生成规范麻醉文书,自动信息采集

C#手麻系统源码&#xff0c;C# .net 桌面软件 C/S版手术麻醉信息管理系统源码 手术麻醉信息管理系统源码是专门为麻醉科和手术室开发的围手术期临床信息管理系统&#xff0c;具备以下功能: 1.规范手术流程管理&#xff1a;系统整合了手术室、麻醉科的工作及管理流程&#xff…

一则“孔乙己文学”,刺痛了多少学子的心?

个人主页&#xff1a;【&#x1f60a;个人主页】 孔乙已是鲁迅笔下人物&#xff0c;穷困流倒还穿着象征读书人的长衫&#xff0c;迁腐、麻木。最近&#xff0c;大家自我调佩是“当代孔乙己”&#xff0c;学历成为思想负担&#xff0c;找工作时高不成低不就。 文章目录 前言对待…

【C++技能树】再也不怕没有对象了 --初识类

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 目录 0. 初识类1.类的引入**在一个结构体里可以定义函数了:**定义一个Struct的时候再也不用写Struct了. 2.类的定义类的两种定义方式:成员…

05 【Sass语法介绍-插值】

1.前言 在很多编程器语言中都有插值这个概念&#xff0c;在 Sass 样式表的任何地方几乎都可以使用插值&#xff0c;你可以将这些包裹在 #{} 中来使用&#xff0c;所以记住在 Sass 中使用插值的方式是 #{} &#xff0c;本节我们一起来看一下插值在 Sass 中的使用场景以及它的语…

Authing 入选《2022年度中国高科技高成长企业》榜单

​ 近日&#xff0c;Authing 入选【2022 年度中国高科技高成长企业系列榜单 】- 【云原生高成长企业榜】&#xff0c;该榜单由【第一新声】联合【天眼查】发起的“数字中国”系列之 2022 年度中国高科技高成长企业系列榜单发布&#xff0c;该榜单旨在发现和挖掘被资本市场关注&…

Sentinel介绍及搭建

分布式流量防护 服务雪崩 服务提供者不可用导致服务调用者也跟着不可用&#xff0c;以此类推引起整个链路中的所有微服务都不可用 分布式流量防护 在分布式系统中&#xff0c;服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护&#xff0c;并有效控制流量&…