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

MyBatisPlus之增删改查

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
MyBatisPlus之增删改查


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、什么是MybatisPlus?
  • 二、SpringBoot集成MyBatisPlus
  • 三、MybatisPlus增删改查
    • 新增
    • 修改
    • 删除
      • 根据id删除
      • 批量删除
      • 根据条件删除
    • 查询
      • 根据id查询
      • 根据id批量查询
      • 根据字段条件查询
      • 条件构造器查询
        • 什么是条件构造器
        • 条件构造器参数
        • 条件构造器用法
      • 分页查询
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

在当今的软件开发领域,Java 一直占据着重要的地位。而在 Java 数据库操作方面,MyBatis-Plus 以其简洁、高效、易用的特点,成为了许多开发者的首选。
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它在 MyBatis 的基础上进行了扩展和优化,提供了更加方便快捷的数据库操作方式。使用 MyBatis-Plus,我们可以通过注解和配置文件来轻松地实现数据库的增删改查操作,极大地提高了开发效率。
在本博客中,我们将详细介绍 MyBatis-Plus 的增删改查功能,并通过实际的代码示例来演示如何使用这些功能。我们将从基础知识开始,逐步深入探讨 MyBatis-Plus 的高级特性。无论你是刚刚接触 MyBatis-Plus,还是已经有一定经验的开发者,都能从中受益。
通过阅读本博客,你将了解到如何利用 MyBatis-Plus 进行高效的数据库操作,以及如何优化你的代码以获得更好的性能。让我们一起开启 MyBatis-Plus 之旅吧!


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是MybatisPlus?

MyBatis-Plus 是一个基于 MyBatis 框架的增强工具,它提供了一系列额外的功能和特性,使数据库操作更加简单和高效。MyBatis-Plus 的主要特点和优势包括:

  • 简化 SQL 编写:MyBatis-Plus 提供了丰富的注解和内置方法,极大地简化了 SQL 查询语句的编写。你可以通过注解或方法调用的方式来定义查询条件、分页、排序等,而无需手动编写复杂的 SQL 语句。
  • 自动生成代码:MyBatis-Plus 可以根据数据库表结构自动生成实体类、Mapper 接口、Service 类等相关代码,减少了手动编写代码的工作量。
  • 懒人式 CRUD 操作:MyBatis-Plus 提供了懒人式的 CRUD(增删改查)操作方法,你可以通过简单的调用方法来实现对数据库的增删改查操作,无需编写复杂的 SQL 语句和映射文件。
  • 分页和排序功能:MyBatis-Plus 内置了强大的分页和排序功能,你可以通过简单的设置来实现分页和排序,无需手动编写 SQL 语句。
  • 性能优化:MyBatis-Plus 对查询语句进行了优化,支持缓存、动态 SQL、延迟加载等技术,提高了数据库操作的性能。
  • 灵活的插件机制:MyBatis-Plus 支持插件扩展,你可以通过编写插件来实现自定义功能,如拦截器、分页插件等。

二、SpringBoot集成MyBatisPlus

1.创建SpringBoot项目,添加MyBatisPlus起步依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
<!-- MyBatisPlus -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.0</version>
</dependency>
<!-- mysql驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version>
</dependency>
<!-- lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

2.在SpringBoot配置文件中配置数据源

# 数据源
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///school?serverTimezone=UTCusername: rootpassword: root

3.编写实体类,大家根据需求编写
4.编写Mapper接口,继承BaseMapper

public interface StudentMapper extends BaseMapper<Student> {
}

5.在 SpringBoot启动类中添加 @MapperScan 注解,扫描Mapper文件夹

@SpringBootApplication
@MapperScan("com.zhangsan.mpdemo2.mapper")
public class SpringbootMpApplication {public static void main(String[] args) {SpringApplication.run(SpringbootMpApplication.class, args);}
}

6.测试Mapper方法

@SpringBootTest
public class StudentMapperTest {@Autowiredprivate StudentMapper studentMapper;@Testpublic void testFindById(){Student student = studentMapper.selectById(1);System.out.println(student);}
}

三、MybatisPlus增删改查

新增

@Test
public void testAdd(){Student student = new Student(null,"zhangsan","zs@zs.com","m",20);studentMapper.insert(student);// MyBatisPlus插入成功后,可直接直接获取主键的值System.out.println(student.getId());
}

修改

@Test
public void testUpdate() {//创建实体类对象Student student = new Student();//设置需要更新的属性student.setName("zhangsan");//设置需要修改的数据idstudent.setId(1);//根据主键进行更新,没有设置的值则忽略studentMapper.updateById(student);
}

删除

根据id删除

// 根据id删除
@Test
public void testDeleteById(){studentMapper.deleteById(7);
}

批量删除

// 批量删除
@Test
public void testDeleteBatch(){ArrayList<Integer> ids = new ArrayList();ids.add(2);ids.add(3);studentMapper.deleteBatchIds(ids);
}

根据条件删除

// 根据字段条件删除
@Test
public void testDeleteMap(){Map<String,Object> map = new HashMap();// 键为数据库列名,而不是对象属性名map.put("sname","小王");map.put("gender","m");// 删除name为小王且gender为m的数据studentMapper.deleteByMap(map);

查询

根据id查询

// 根据id查询
@Test
public void testFindById() {Student student = studentMapper.selectById(1);System.out.println(student);
}

根据id批量查询

// 根据id批量查询
@Test
public void testFindBatch() {//创建主键集合List<Integer> ids = new ArrayList<>();ids.add(1);ids.add(2);ids.add(3);List<Student> students = studentMapper.selectBatchIds(ids);students.forEach(System.out::println);
}

根据字段条件查询

// 根据字段条件查询
@Test
public void testFindMap() {Map<String,Object> map = new HashMap<>();map.put("sname","zhangsan");map.put("gender","m");//查询name为baizhan,gender为m的数据List<Student> students = studentMapper.selectByMap(map);students.forEach(System.out::println);
}

条件构造器查询

什么是条件构造器

在MybatisPlus中,条件构造器是一个可以帮助我们使用面向对象的方式实现数据库操作的where条件的工具,它将条件封装成了一个Wrapper对象。在使用时,我们可以创建条件构造器对象,其中Wrapper和AbstractWrapper是两个抽象类,不能直接实例化,我们在使用时常用的具体实现是QueryWrapper和UpdateWrapper。
条件构造器在查询和修改数据库数据时非常有用。在写一些复杂查询时,我们可以创建一个测试类,并在其中注入需要的Mapper,然后创建一个条件构造器对象,并使用该对象设置查询条件。最后,可以调用Mapper的查询方法来获取结果。

条件构造器参数
查询方式说明
or或条件语句
and且条件语句
like模糊查询 like
notLike模糊查询 not Like
existsexists 条件语句
notExistsnot Exists 条件语句
isNullnull 值查询
isNotNullis Not Null 查询
inin 查询
notInnot in 查询
groupBy分组查询
orderBy排序查询
having分组后筛选
eq等于 =
ne不等于 <>
betweenbetween 条件语句
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
条件构造器用法
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class Example {public static void main(String[] args) {// 创建一个测试类,并在其中注入需要的 MapperExample example = new Example();// 执行查询操作List<Integer> result = example.queryData();System.out.println(result);}public List<Integer> queryData() {// 创建一个条件构造器对象QueryWrapper<Integer> wrapper = new QueryWrapper<>();// 设置查询条件wrapper.lt("id", 10).gt("id", 5).like("name", "A%").eq("type", 1);// 调用 Mapper 的查询方法List<Integer> list = this.mapper.queryList(wrapper);return list;}
}

分页查询

1.在配置类或启动类配置分页插件

// 注册插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;
}

2.分页查询

// 分页查询
@Test
public void testFindPage() {//创建分页条件,从第0条数据开始,获取两条数据Page page = new Page(2,2);// 分页查询,第二个参数为QueryWrapper,用于添加查询条件IPage<Student> iPage = studentMapper.selectPage(page, null);// 打印分页数据System.out.println("结果集:"+iPage.getRecords());System.out.println("总页数:"+iPage.getPages());System.out.println("总条数:"+iPage.getTotal());System.out.println("当前页:"+iPage.getCurrent());System.out.println("每页条数:"+iPage.getSize());
}

总结

提示:这里对文章进行总结:

MybatisPlus是一个支持自动映射和简化数据库操作的Mybatis增强工具,提供了丰富的注解和扩展功能,用于简化数据库的增删改查操作。以下是MybatisPlus的增删改查总结:

  • 增:使用Mapper接口的相应方法,如insert(),传入实体对象作为参数,即可完成数据的新增。
  • 删:使用Mapper接口的相应方法,如delete(),传入实体对象作为参数,即可完成数据的删除。
  • 改:使用Mapper接口的相应方法,如update(),传入实体对象作为参数,并指定需要修改的列,即可完成数据的修改。
  • 查:使用Mapper接口的相应方法,如selectOne()、selectList()等,传入查询条件作为参数,即可完成数据的查询。
    此外,MybatisPlus还支持条件构造器、分页查询等功能,可以根据具体需求进行配置和使用。

相关文章:

MyBatisPlus之增删改查

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 MyBatisPlus之增删改查 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是Mybati…...

pytorch03:transforms常见数据增强操作

目录 一、数据增强二、transforms--Crop裁剪2.1 transforms.CenterCrop2.2 transforms.RandomCrop2.3 RandomResizedCrop2.4 FiveCrop和TenCrop 三、transforms—Flip翻转、旋转3.1RandomHorizontalFlip和RandomVerticalFlip3.2 RandomRotation 四、transforms —图像变换4.1 t…...

blob文件流前端显示pdf

首先请求需要修改 responseType: ‘blob’, 需要修改 请求头 {responseType: blob,url: url,method: get,}三种方法&#xff1a; 1.直接处理&#xff0c;在新页面打开 const blob new Blob([data],{ type:application/pdf }) let url window.URL.createObjectURL(blob) wi…...

Android 接入第三方数数科技平台

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数数科技平台是什么&#xff1f;二、使用步骤1.集成SDK2. 初始化3. 发送事件和设置账号id4. 验证发送事件是否成功 小结 前言 一个成熟的App必然不可缺少对…...

LVM和磁盘配额

一&#xff1a;LVM概述&#xff1a; LVM 是 Logical Volume Manager 的简称&#xff0c;译为中文就是逻辑卷管理。 能够在保持现有数据不变的情况下&#xff0c;动态调整磁盘容量&#xff0c;从而提高磁盘管理的灵活性 /boot 分区用于存放引导文件&#xff0c;不能基于LVM创建…...

uni-app uni-app内置组件

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…...

C语言——格式说明符前面加修饰符

在C语言中&#xff0c;格式说明符前面可以添加一些修饰符来控制输出或输入的格式&#xff0c;主要包括宽度、精度、左对齐标志和前缀填充字符等。 1. 宽度&#xff08;Width&#xff09; %[width]type&#xff1a;这里的width是一个非负整数&#xff0c;表示输出字段的最小宽度…...

实验室(检验科)信息系统LIS源码,客户端:WPF+Windows Forms

lis系统源码&#xff0c;医学检验信息系统源码 LIS系统&#xff08;Laboratory Information System&#xff09;即实验室&#xff08;检验科&#xff09;信息系统&#xff0c;它将检验仪器付出的检验数据与相关信息接入计算机网络系统中&#xff0c;让患者、实验室、临床科室、…...

有道翻译web端 爬虫, js

以下内容写于2023-12-28, 原链接为:https://fanyi.youdao.com/index.html#/ 1 在输入框内输入hello world进行翻译,通过检查发出的网络请求可以看到翻译文字的http接口应该是: 2 复制下链接最后的路径,去js文件中搜索下: 可以看到这里是定义了一个函数B来做文字的翻译接口函数…...

uni-app API接口扩展组件(uni-ui)

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…...

信息化和数字化的本质区别是什么?

信息化和数字化是两个概念的区别 它们有什么区别和联系呢&#xff1f;信息化&#xff1a;“业务数据化”&#xff0c;先让业务流程能被数据记录下来。信息化“业务数据化”。数字化&#xff1a;“数据业务化”&#xff0c;用已累积的业务数据去反哺优化业务流程。数字化“数据…...

发表《Nature》!美国研究团队发布可编程逻辑量子处理器

​&#xff08;图片来源&#xff1a;网络&#xff09; 近期&#xff0c;美国研究团队开发了一款可编程的逻辑量子处理器&#xff0c;并展示了可靠且可扩展的量子计算所需的关键要素&#xff0c;该成果已发表于《Nature》期刊&#xff08;doi&#xff1a;10.1038/s41586-023-06…...

CISSP 第1章:实现安全治理的原则和策略

作者&#xff1a;nothinghappend 链接&#xff1a;https://zhuanlan.zhihu.com/p/669881930 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 CIA CIA 三性&#xff1a; 机密性&#xff1a;和数据泄露有关。完整性…...

【并发设计模式】聊聊线程本地存储模式如何实现的线程安全

前面两篇文章&#xff0c;通过两阶段终止的模式进行优雅关闭线程&#xff0c;利用数据不变性的方式保证数据安全&#xff0c;以及基于COW的模式&#xff0c;保证读数据的安全。本篇我们来简述下如果利用线程本地存储的方式保证线程安全。 首先一个大前提就是并发问题&#xff…...

边缘计算网关:重新定义物联网数据处理

随着物联网&#xff08;IoT&#xff09;设备的爆炸式增长&#xff0c;数据处理和分析的需求也在迅速增加。传统的数据处理方式&#xff0c;将所有数据传输到中心服务器进行处理&#xff0c;不仅增加了网络负担&#xff0c;还可能导致数据延迟和安全问题。因此&#xff0c;边缘计…...

Linux之下载安装

rpm包管理 rpm介绍 rpm用于互联网下载包的打包及安装工具&#xff0c;他包含在某些linux分发版本中。他生成具有.rpm扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具&#xff09;的缩写&#xff0c;类似windows的steup.exe。 rpm包的查询指令 查询已经安装…...

【HarmonyOS开发】案例-记账本开发

OpenHarmony最近一段时间&#xff0c;简直火的一塌糊度&#xff0c;学习OpenHarmony相关的技术栈也有一段时间了&#xff0c;做个记账本小应用&#xff0c;将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件&#xff08;Button、Select、Text、Span、Divider、Image&am…...

webrtc中的接口代理框架

文章目录 接口代理框架Proxy体系类结构导出接口 webrtc的实际运用PeerConnectionFactoyPeerConnection使用 接口代理框架 webrtc体系庞大&#xff0c;模块化极好&#xff0c;大多数模块都可以独立使用。模块提供接口&#xff0c;外部代码通过接口来使用模块功能。 在webrtc中通…...

【AIGC-图片生成视频系列-4】DreamTuner:单张图像足以进行主题驱动生成

目录 一. 项目概述 问题&#xff1a; 解决&#xff1a; 二. 方法详解 a) 整体结构 b) 自主题注意力 三. 文本控制的动漫角色驱动图像生成的结果 四. 文本控制的自然图像驱动图像生成的结果 五. 姿势控制角色驱动图像生成的结果 2023年的最后一天&#xff0c;发个文记录…...

Jupyter Notebook的10个常用扩展介绍

Jupyter Notebook&#xff08;前身为IPython Notebook&#xff09;是一种开源的交互式计算和数据可视化的工具&#xff0c;广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面&#xff0c;允许用户创建和共享文档&#xff0c;这些文档包含实时代码、…...

uniapp项目如何引用安卓原生aar插件(避坑指南三)

官方文档说明&#xff1a;uni小程序SDK 【彩带- 避坑知识点】 如果引用原生aar插件&#xff0c;都配置好之后&#xff0c;云打包&#xff0c;报不包含此插件&#xff0c;除了检查以下步骤流程外&#xff0c;还要检查一下是否上打包的原生插件aar流程有问题。 1.第一步在uniapp项…...

YOLOv8改进 | 检测头篇 | ASFF改进YOLOv8检测头(全网首发)

一、本文介绍 本文给大家带来的改进机制是利用ASFF改进YOLOv8的检测头形成新的检测头Detect_ASFF&#xff0c;其主要创新是引入了一种自适应的空间特征融合方式&#xff0c;有效地过滤掉冲突信息&#xff0c;从而增强了尺度不变性。经过我的实验验证&#xff0c;修改后的检测头…...

思维训练-怎样设计一个MQ

架构师需要做各种设计&#xff0c;要不断地提高自己的设计能力。这有没有方法可以训练呢&#xff1f;有的&#xff0c;就是看到什么、想到什么&#xff0c;就假设对面坐着产品经理&#xff0c;一起讨论怎么把它设计出来。比如怎样设计一个MQ 我&#xff1a;首先我确认一下需求。…...

RK3399平台入门到精通系列讲解(导读篇)21天挑战Linux系统开发

🚀返回总目录 文章目录 一、关于作者1、博主的联系方式2、支持二、需要具备的知识和工具1、需掌握知识点2、需了解的知识点三、通过系列博客可以学到什么1、本系列博文特色2、21天学习目标3、21天学习内容4、学习时间5、学习产出...

企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment

错误信息 # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc0x00007f218f93485d, pid10, tid58 # # JRE version: OpenJDK Runtime Environment 18.9 (11.0.14.11) (build 11.0.14.11) # Java VM: OpenJDK 64-Bit Server VM 18.9…...

nginx-docker 搭建websocket反向代理

下载镜像 docker pull nginx复制出配置文件 将/etc/nginx/nginx.conf和/etc/nginx/conf.d/default.conf复制到本机 nginx.conf文件内容 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_c…...

blender插件开发

Quickstart — Blender Python API Blender Python 编程&#xff1a;关键概念 - 知乎 系列目录链接&#xff08;更新中&#xff0c;如无链接说明未更新&#xff09; [Blender Python] 列出/插入/删除物体&#xff0c;Blender数据对象 - 知乎 (zhihu.com)[Blender Python] 设…...

【数据结构】二叉搜索(查找/排序)树

一、二叉搜索树基本概念 1、定义 二叉搜索树&#xff0c;又称为二叉排序树&#xff0c;二叉查找树&#xff0c;它满足如下四点性质&#xff1a; 1&#xff09;空树是二叉搜索树&#xff1b; 2&#xff09;若它的左子树不为空&#xff0c;则左子树上所有结点的值均小于它根结…...

Vue:Vue与VueComponent的关系图

1.一个重要的内置关系&#xff1a;VueComponent.prototype.proto Vue.prototype 2.为什么要有这个关系&#xff1a;让组件实例对象&#xff08;vc&#xff09;可以访问到 Vue原型上的属性、方法。 案例证明&#xff1a; <!DOCTYPE html> <html lang"en"&…...

Elasticsearch8集群部署

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 本文记录在3台服务器上离线搭建es8.7.1版本集群。 1. 修改系统配置 1.1 hosts配置 在三台es节点服务器加入hostname解析&…...

网站建设烟台/北京疫情太严重了

出品丨Docker公司&#xff08;ID&#xff1a;docker-cn&#xff09;编译丨小东每周一、三、五 与您不见不散&#xff01; 早前&#xff0c;我们分享了一篇名为“镜像扫描基于策略的镜像提升”&#xff0c;打造安全的 Kubernetes 供应链&#xff01;的文章&#xff0c;它主要介绍…...

自己做网站在线看pdf/百度智能云官网

http://www.cnblogs.com/wenjiang/p/3180324.html handleMessage 好用转载于:https://www.cnblogs.com/userbibi/p/3357501.html...

网站如何做图片特效/seo全称

使用的是XHScrollMenu和UIPageViewController来构建5个页面:ViewController1, ViewController2, ViewController3, ViewController4, ViewController5。XHScrollMenu和UIPageViewController左右滑动均可以控制页面的切换。一般情况下是正确的。但如果点击了menu&#xff0c;切换…...

一个服务器可以做多个网站吗/重庆seo培训

HTML5标签功能列表 基础&#xff1a; 标签 描述 <!DOCTYPE> 定义文档类型。 <html> 定义 HTML 文档。 <title> 定义文档的标题。 <body> 定义文档的主体。 <h1> to <…...

做reference的网站/竞价托管哪家效果好

挂载windows 盘 编辑fstab /dev/sda5 /host ntfs default 0 0 也可以根据uuid进行挂载(代替/dev/sda5) ls -all /edv/disk/by-uuid //显示分区的信息可以查看到各分区的uuid转载于:https://www.cnblogs.com/zhangzhang/archive/2012/05/14/2499546.html...

湖南建设人力资源网和报考平台/齐三seo顾问

01 开启多条线程&#xff0c;每条线程都只下载文件的一部分&#xff08;通过设置请求头中的Range来实现&#xff09; 02 创建一个和需要下载文件大小一致的文件&#xff0c;判断当前是那个线程&#xff0c;根据当前的线程来判断下载的数据应该写入到文件中的哪个位置。&#xf…...