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

SpringBoot中使用MyBatis-Plus详细介绍

目录

一、MyBatis-Plus的使用步骤

1.引入MybatisPlus的起步依赖

2.定义Mapper(也叫dao)层的接口

3.MyBatis-Plus中常用注解

4. 使用MyBatis-Plus时要做如下配置

5.条件构造器 Wrapper


一、MyBatis-Plus的使用步骤

1.引入MybatisPlus的起步依赖

MyBatisPlus官方提供了starter依赖包,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。
因此我们可以用_MybatisPlusstarter_直接代替Mybatisstarter:

<!--Mybatisplus-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>
2.定义Mapper(也叫dao)层的接口

用我们自定义的dao接口继承MybatisPlus提供的BaseMapper接口:

public interface UserMapper extends BaseMapper<User>?{
}

在该接口中,提供了许多基本的sql增删改查方法,我们无需写sql语句,直接调用这些方法即可完成对数据的增删改查;

3.MyBatis-Plus中常用注解

MyBatisPlus会通过扫描实体类,并基于反射获取实体类的属性名称,然后匹配到数据库表中相应字段。具体关系如下图:

因此,我们在定义实体类和数据库表时,应该遵循MP中一些默认的约定(规范)来确保字段名和属性名正确的匹配到。约定如下:

  • 类名:蛇峰转下刘线作为表名
  • 名为id的属性:作为表中的主键
  • 变量名:陀峰转下刘线作为表的字段名

如果在写Java代码时,我们某些代码不想符合上述三条约定的写法;也可以使用MP中的常见注解来自定义约定,如下:

4. 使用MyBatis-Plus时要做如下配置

(1)如果是在Spring Boot 工程中,要配置Mapper接口所在的包:在Spring Boot的启动类上添加**@MapperScan**注解,并指定Mapper接口所在的包路径。

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {
?? ?public static void main(String[] args) {? ? ? ?SpringApplication.run(Application.class, args);?  }
?
}

注意:在该例子中:**“com.baomidou.mybatisplus.samples.quickstart.mapper”**是 MyBatis-Plus 官方示例项目中的一个包路径,用于存放示例的 Mapper 接口。在实际应用中,你应该将@MapperScan注解中的字符串参数替换为你自己的项目中 Mapper 接口所在的包路径。

(2)在Spring MVC工程中使用MyBatis-Plus要做如下配置

①首先,在.xml配置文件中配置 MapperScan 注解:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">? ?<property name="basePackage" value="com.baomidou.mybatisplus.samples.quickstart.mapper"/>
</bean>

②然后,调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">? ?<property name="dataSource" ref="dataSource"/>
</bean>

③通常来说,一般的简单工程,通过以上配置即可正常使用 MyBatis-Plus,具体可参考以下链接:? Spring Boot 快速启动示例 ? Spring Boot 快速启动示例,

? ?Spring MVC 快速启动示例 ? ?Spring MVC 快速启动示例。

同时 MyBatis-Plus 提供了大量的个性化配置来满足不同复杂度的工程,大家可根据自己的项目按需取用,详细配置请参考链接:

使用配置[这里是图片004]https://baomidou.com/reference/

Spring Boot 配置

在 Spring Boot 项目中,可以通过 application.ymlapplication.properties 文件来配置 MyBatis-Plus。

yml配置文件中MyBatisPlus的配置项继承了MyBatis.原生配置和一些自己特有的配置。例如:

mybatis-plus:type-aliases-package: com.yzx.xxx.po #别名扫描包mapper-locations: "classpath*:/mapper/**/*,Xml" #Mapper.Xml文件地址configuration:map-underscore-to-camel-case: true #是否开启下划线和驼峰的映射cache-enabled: false #是否开启二级缓存global-config:db-config:id-type: assign_id #id为雪花算法生成update-strategy: not_null #设置更新策略:只更新非空字段
?

代码中globa-config下的配置表示全局其优先级小于实体类中注解的优先级。

如下图:

Spring MVC 配置

在传统的 Spring MVC 项目中,可以通过 XML 配置文件来配置 MyBatis-Plus。

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">? ?<property name="dataSource" ref="dataSource"/>? ?<property name="mapperLocations" value="classpath*:mapper/**/*.xml"/>? ?<property name="typeAliasesPackage" value="com.your.domain"/>? ?<!-- 其他配置 -->
</bean>
5.条件构造器 Wrapper

前提:BaseMapper接口中自带的增删改查方法都是通过数据的Id作为条件进行的;如果想要自定义查询条件则需要用到条件构造器:Wrapper

Wrapper类与其字类的继承关系如下:

Wrapper类中提供的,用于自定义构建查询条件的一些方法:

下面,我们以最常用的QueryWrapper(查询条件构造器)为例,来演示如何使用条件构造器来构造我们的sql查询

**QueryWrapper(查询语句的条件构造器):**它拓展了select的功能,可以指定查找哪些字段:

使用方法:

  1. 首先,构造一个Wrapper对像,并通过该对象来编写查询条件
  2. 然后,将刚刚创建的Wrapper对象作为参数传入查询方法中

例如我们要进行一个如下的sql查询:

查询出名字中带o的,存款大于等于1000元的人的id、用户名(username)、信息(info)和收入(balance)

SQL语句如下:

SELECT id,username,info,balance
FROM user
WHERE username LIKE '%o%'
AND balance >= 1000;

QueryWrapper(条件构造器)来实现上述SQL语句的代码如下:

@Test
public void testQuerywrapper(){//1.构建查询条件QueryWrapper<user> wrapper = new QueryWrapper<user>().select("id","username","info","balance").like("username","o").ge("balance",1000);//2.查询List<user> users = userMapper.selectList(wrapper);
}

条件构造器Wrapper中的函数所对应的sql语法,具体对应表如下:

**另外:**在 MyBatis-Plus 中的IService接口是对service层的一个加强,继承了IService接口的service会自带一些方法:(感兴趣的小伙伴可以自行探索)

其中:save()方法是一个非常重要的功能,它用于将实体对象保存到数据库中。具体地说,save 方法会根据实体对象的 ID(主键)来决定是执行插入(insert)操作还是更新(update)操作。

  • **插入操作:**如果传入的实体对象的 ID 为空(即该对象在数据库中尚不存在),save 方法会执行插入操作,将该对象插入到数据库中,并自动生成一个 ID(如果使用了自动增长的主键策略)。

  • **更新操作:**如果传入的实体对象的 ID 不为空(即该对象在数据库中已经存在),save 方法会执行更新操作,将该对象的属性更新到数据库中对应的记录上。这里需要注意的是,MyBatis-Plus 默认只会更新非空属性,即如果实体对象的某个属性为 null,则不会将该属性更新到数据库中(除非你进行了特殊的配置)。

相关文章:

SpringBoot中使用MyBatis-Plus详细介绍

目录 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 2.定义Mapper&#xff08;也叫dao&#xff09;层的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus时要做如下配置 5.条件构造器 Wrapper 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 M…...

PCL 部分点云视点问题【2025最新版】

目录 一、问题概述二、解决方案1、软件实现2、代码实现三、调整之后博客长期更新,本文最近更新时间为:2025年1月18日。 一、问题概述 针对CloudCompare软件处理过的pcd格式点云,在使用PCL进行特征点提取、配准等实验中最终显示结果出现点云位置偏差较大的问题,本博客给出解…...

【Linux】常见指令(三)

Linux常见指令 01.nano02.cat03.cp04.mv 我的Linux专栏&#xff1a;【Linux】 本节Linux指令讲解的基本框架如下&#xff1a; 大家可以根据自己的需求&#xff0c;自行进行跳转和学习&#xff01; 01.nano nano Linux 系统中一款简单易用的命令行文本编辑器&#xff0c;适合…...

第5章:Python TDD定义Dollar对象相等性

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

nuxt3项目打包部署到服务器后配置端口号和开启https

nuxt3打包后的项目部署相对于一般vite打包的静态文件部署要稍微麻烦一些&#xff0c;还有一个主要的问题是开发环境配置的.env环境变量在打包后部署时获取不到&#xff0c;具体的解决方案可以参考我之前文章 nuxt3项目打包后获取.env设置的环境变量无效的解决办法。 这里使用的…...

MongoDB文档查询

一、实验目的 1. 理解MongoDB文档数据库的基本概念和特性。 2. 掌握在MongoDB中创建集合和插入文档数据的方法。 3. 学习使用MongoDB进行文档查询操作&#xff0c;包括查询、过滤和排序等。 二、实验环境准备 1. JAVA环境准备&#xff1a;确保Java Development Kit (J…...

【GORM】初探gorm模型,字段标签与go案例

GORM是什么&#xff1f; GORM 是一个Go 语言 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它让我们可以使用结构体来操作数据库&#xff0c;而无需编写SQL 语句 GORM 模型与字段标签详解 在 GORM 中&#xff0c;模型是数据库表的抽象表示&#xff0c;字段标签&am…...

Windows下的Milvus安装秘籍:向量数据库轻松上手

目录 一、简介 二、dockers的安装 1.介绍 2.环境准备 1.启动WSL 的功能。 2.安装并启动Hyper-V Windows10下的安装办法&#xff1a; Windows11下的安装办法&#xff1a; 启动Hyper-V 3.Docker的安装 4、验证是否安装成功 三、安装Milvus 1.Milvus下载 2.Milvus启动…...

在GUI中添加一个Label

标签是一种非常简单的小部件,它可以为我们的图形用户界面(GUI)增添价值。它可以阐释其他组件的用途,提供一些额外的信息,这可以引导用户理解输入框组件的含义,也能够解释那些无需用户输入数据的组件所显示数据的含义。 准备就绪 我们将扩展第一个应用案例,即《创建第一…...

hive连接mysql报错:Unknown version specified for initialization: 3.1.0

分享下一些报错的可能原因吧 1.要开启hadoop 命令&#xff1a;start-all.sh 2.检查 hive-site.xml 和 hive-env.sh。 hive-site.xml中应设置自己mysql的用户名和密码 我的hive-site.xml如下&#xff1a; <configuration><property><name>javax.jdo.opt…...

Unity Shader学习日记 part5 CG基础

在了解完Shader的基本结构之后&#xff0c;我们再来看看编写着色器的语言。 Shader编写语言有CG&#xff0c;HLSL两种&#xff0c;我们主要学习CG的写法。 数据类型 CG的基础变量类型 uint a12;//无符号32位整形 int b12;//32位整形float f1.2f;//32位浮点型 half h1.2h;//…...

第7章:Python TDD测试Franc对象乘法功能

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

两级式三相光伏并网逆变器Matlab/Simulink仿真模型

忘记更新最经典的光伏并网仿真模型了&#xff0c;作为包含经典的MPPT和并网恒功率因素的双闭环控制模型&#xff0c;也是很多相关专业学生的入门研究内容&#xff0c;光伏并网模型三相的和单相都有。 其中三相光伏并网逆变器有大功率和小功率的两种&#xff0c;之前早在硕士期…...

redis性能优化参考——筑梦之路

基准性能测试 redis响应延迟耗时多长判定为慢&#xff1f; 比如机器硬件配置比较差&#xff0c;响应延迟10毫秒&#xff0c;就认为是慢&#xff0c;机器硬件配置比较高&#xff0c;响应延迟0.5毫秒&#xff0c;就认为是慢。这个没有固定的标准&#xff0c;只有了解了你的 Red…...

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…...

HTML<bdo>标签

例子 指定文本方向&#xff1a; <bdo dir"rtl"> This text will go right-to-left. </bdo> <!DOCTYPE html> <html> <body> <h1>The bdo element</h1> <p>This paragraph will go left-to-right.</p> …...

STM32+W5500+以太网应用开发+003_TCP服务器添加OLED(u8g2)显示状态

STM32W5500以太网应用开发003_TCP服务器添加OLED&#xff08;u8g2&#xff09;显示状态 实验效果3-TCP服务器OLED1 拷贝显示驱动代码1.1 拷贝源代码1.2 将源代码添加到工程1.3 修改代码优化等级1.4 添加头文件路径1.5 修改STM32CubeMX工程 2 修改源代码2.1 添加头文件2.2 main函…...

【机器学习实战中阶】使用SARIMAX,ARIMA预测比特币价格,时间序列预测

数据集说明 比特币价格预测&#xff08;轻量级CSV&#xff09;关于数据集 致谢 这些数据来自CoinMarketCap&#xff0c;并且可以免费使用该数据。 https://coinmarketcap.com/ 数据集:链接: 价格预测器 源代码与数据集 算法说明 SARIMAX&#xff08;Seasonal AutoRegressive …...

各语言镜像配置汇总

镜像配置汇总 Nodejs [ npm ]Python [ pip ] Nodejs [ npm ] // # 记录日期&#xff1a;2025-01-20// 查询当前使用的镜像 npm get registry// 设置淘宝镜像 npm config set registry https://registry.npmmirror.com/// 恢复为官方镜像 npm config set registry https://regi…...

细说STM32F407单片机电源低功耗StopMode模式及应用示例

目录 一、停止模式基础知识 1、进入停止模式 2、停止模式的状态 3、退出停止模式 4、SysTick定时器的影响 二、停止模式应用示例 1、示例功能和CubeMX项目配置 &#xff08;1&#xff09;时钟 &#xff08;2&#xff09;RTC &#xff08;3&#xff09;ADC1 &#xf…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...