基于SpringBoot3从零配置MybatisPlus

基于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.mfbz.cn/a/17024.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ETL到底是什么?

各位数据的朋友&#xff0c;大家好&#xff0c;我是老周道数据&#xff0c;和你一起&#xff0c;用常人思维数据分析&#xff0c;通过数据讲故事。 前段时间和大家聊了一个话题&#xff0c;就是为什么要用构建数据仓库&#xff0c;而不是直连数据源的方式开发报表&#xff1f;通…

vim编辑文件

目录 一、vi和vim &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;相同点 &#xff08;3&#xff09;不同点 二、使用vim打开文件 三、使用vim编辑文件 &#xff08;1&#xff09;vim的四个模式 &#xff08;2&#xff09;命令模式下的编辑命令 删除 复制 …

你最关心的4个零代码问题,ChatGPT 帮你解答了!

作为人工智能&#xff08;AI&#xff09;新型聊天机器人模型 ChatGPT&#xff0c;刚上线5天就突破100万用户&#xff0c;两个多月全球用户量破亿&#xff0c;不愧为业界最炙热的当红炸子鸡。 ChatGPT 是一种语言生成模型&#xff0c;由 OpenAI 开发和训练。它是基于 Transform…

轻松掌握mysql事务的四大特性ACID及实现原理

1、介绍 要实现这四大特性&#xff0c;我们先了解下mysql中的缓冲池和数据页 2、保证原子性和一致性 1、通过undo log保证数据的原子性和一致性 undo log保证了事务的原子性和一致性。 3、保证隔离性 1、并发事务产生时容易产生的隔离性问题 脏读 不可重复读 幻读…

基于电流控制的并网逆变器(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

如何完全卸载linux下通过rpm安装的mysql

卸载linux下通过rpm安装的mysql 1.关闭MySQL服务2.使用 rpm 命令的方式查看已安装的mysql3. 使用rpm -ev 命令移除安装4. 查询是否还存在遗漏文件5. 删除MySQL数据库内容 1.关闭MySQL服务 如果之前安装过并已经启动&#xff0c;则需要卸载前请先关闭MySQL服务 systemctl stop…

Python代码学习之给图片添加文字或图片水印

前言 图片加水印有什么好处&#xff1f;在现今的数字化时代&#xff0c;网络上的图片泛滥&#xff0c;盗图现象也越来越严重。因此&#xff0c;在发布文章时&#xff0c;为了保护自己的原创作品版权&#xff0c;很多人选择使用水印来保护他们的图片。这样就能更好地做到&#…

类和对象(一)

目录 前言 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 3.1 类定义的两种方式 3.2 成员变量命名规则建议 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5.类的作用域 6.类的实例化 7.类对象模型 8.this指针 8.1 this指针的特性 前言 今天小编就开始给…

【HTML+CSS+JS】登录注册页面大合集

前言 学JS也学了一段时间&#xff0c;正巧碰上了人工智能要调用人脸识别接口进行真人人脸识别&#xff0c;于是便萌生了用人脸来进行注册和登录的想法&#xff0c;这样的话就需要开发一个登录注册页面&#xff0c;然后用JS绑定注册事件调用人脸识别接口进行登录注册 饭要一口一…

网络安全之密码学

目录 密码学 定义 密码的分类 对称加密 非对称加密 对称算法与非对称算法的优缺点 最佳解决办法 --- 用非对称加密算法加密对称加密算法的密钥 非对称加密如何解决对称加密的困境 密钥传输风险 密码管理难 常见算法 对称算法 非对称算法 完整性与身份认证最佳解决…

PAVC100R4222 PARKER轴向柱塞泵

PAVC100R4222 PARKER轴向柱塞泵特点&#xff1a; 1、壳体为高强度铸铁 2、两段设计便于维护 3、全密封的轴用轴承 4、内置增压器***高转速性能&#xff0c;可达3000 RPM( PAVC100为2600 RPM) 5、控制器为插装形式&#xff0c;易于现场更换 6、配流盘为可替换的青铜复合 10、过滤…

2016 ICPC合肥站 传递 HDU-5961(拓扑排序 / bitset / 暴力(可hack))

题目链接&#xff1a;HDU-5961 传递 中文题面就不解释题目意思&#xff0c;解释一下名词的意思 完全图&#xff1a;对于一个无向图 G G G 而言&#xff0c;设点集为 V V V&#xff0c;点集中任意不相同两点 u , v u, v u,v 间都有且仅有一条边叫做完全图。 竞赛图&#xff1…

刚转岗做项目经理,无从下手,怎么办?

01 背景 最近在知乎平台看到一个问题是这么说的&#xff1a; 或许很多人都不是从工作开始就是项目专员再到项目经理这里一步一步过来&#xff0c;而是从其他岗位比如售前、销售、产品经理、程序员等转到项目经理岗位的。 那么对于这些人来说&#xff0c;做项目经理会有什么问…

Packet Tracer - 静态路由故障排除

Packet Tracer - 静态路由故障排除 地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 R1 G0/0 172.31.1.1 255.255.255.128 不适用 S0/0/0 172.31.1.194 255.255.255.252 不适用 R2 G0/0 172.31.0.1 255.255.255.0 不适用 S0/0/0 172.31.1.193 255.255…

什么是http代理504网关超时错误,要如何修复?

当你在使用 HTTP 代理时&#xff0c;有时候会遇到"504 网关超时"错误&#xff0c;这个错误看起来非常可怕&#xff0c;但实际上它并不是一个很难解决的问题。在本文中&#xff0c;我将向你介绍 504 错误的定义&#xff0c;以及为什么我们会遇到这个错误&#xff0c;同…

论文笔记——chatgpt评估+

文章目录 1. chatgpt 效果评估:Evaluating ChatGPT’s Information Extraction Capabilities: An Assessment of Performance, Explainability, Calibration, and Faithfulness文章简介文章结论 2. 事件抽取&#xff1a; OneEE: A One-Stage Framework for Fast Overlapping an…

UAD142A01 3BHE012551R0001使用以太网交叉电缆,您也可以直接连接。

​ UAD142A01 3BHE012551R0001使用以太网交叉电缆&#xff0c;您也可以直接连接。 如何将 MicroLogix PLC 连接到计算机并将程序下载到 MicroLogix 1100 MicroLogix PLC由美国罗克韦尔自动化旗下知名工业自动化厂商Allen-Bradley设计。MicroLogix 1100 主要用于小型工业。我们在…

山东专升本计算机第一章-计算机信息技术与计算机文化

计算机信息技术与计算机文化 计算机中的信息表示 数制及其转换 数制&#xff1a;用进位的原则进行计数数码&#xff1a;数制中表示基本数值大小的不同数字符号基数&#xff1a;一种数制所使用的数码个数位权&#xff1a;数码在不同位置的权值 数制的转换 • R进制转化为十进…

【五一创作】【远程工具】- Tabby 下载、安装、使用、配置【ssh/Serial】-免安装、解压即用

目录 一、Tabby 概述 二、Tabby 下载、安装 三、Tabby 的使用  &#x1f449;3.1 使用SSH协议连接Linux开发主机  &#x1f449;3.2 使用Serial(串口)协议连接开发板 一、Tabby 概述 在远程终端工具中&#xff0c;secureCrt 和 XShell 是两款比较有名的远程工具&#xff0c;但…

【计算机图形学】图形变换(以任意直线为对称轴的对称变换)

模块3-2 图形变换 一 实验目的 编写图形各种变换的算法 二 实验内容 1&#xff1a;任意直线的对称变换。要求将变换矩阵写在实验报告中&#xff0c;并与代码匹配。求对任意直线AxByC0的对称变换矩阵。 实验结果如下图所示&#xff1a; 1&#xff1a;预设图形初始化 2&#…