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 |
exists | exists 条件语句 |
notExists | not Exists 条件语句 |
isNull | null 值查询 |
isNotNull | is Not Null 查询 |
in | in 查询 |
notIn | not in 查询 |
groupBy | 分组查询 |
orderBy | 排序查询 |
having | 分组后筛选 |
eq | 等于 = |
ne | 不等于 <> |
between | between 条件语句 |
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之增删改查
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 MyBatisPlus之增删改查 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是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,}三种方法: 1.直接处理,在新页面打开 const blob new Blob([data],{ type:application/pdf }) let url window.URL.createObjectURL(blob) wi…...

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

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

uni-app uni-app内置组件
锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…...
C语言——格式说明符前面加修饰符
在C语言中,格式说明符前面可以添加一些修饰符来控制输出或输入的格式,主要包括宽度、精度、左对齐标志和前缀填充字符等。 1. 宽度(Width) %[width]type:这里的width是一个非负整数,表示输出字段的最小宽度…...

实验室(检验科)信息系统LIS源码,客户端:WPF+Windows Forms
lis系统源码,医学检验信息系统源码 LIS系统(Laboratory Information System)即实验室(检验科)信息系统,它将检验仪器付出的检验数据与相关信息接入计算机网络系统中,让患者、实验室、临床科室、…...

有道翻译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视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…...

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

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

CISSP 第1章:实现安全治理的原则和策略
作者:nothinghappend 链接:https://zhuanlan.zhihu.com/p/669881930 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 CIA CIA 三性: 机密性:和数据泄露有关。完整性…...

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

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

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

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

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

【AIGC-图片生成视频系列-4】DreamTuner:单张图像足以进行主题驱动生成
目录 一. 项目概述 问题: 解决: 二. 方法详解 a) 整体结构 b) 自主题注意力 三. 文本控制的动漫角色驱动图像生成的结果 四. 文本控制的自然图像驱动图像生成的结果 五. 姿势控制角色驱动图像生成的结果 2023年的最后一天,发个文记录…...

Jupyter Notebook的10个常用扩展介绍
Jupyter Notebook(前身为IPython Notebook)是一种开源的交互式计算和数据可视化的工具,广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面,允许用户创建和共享文档,这些文档包含实时代码、…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...