【MyBatis Plus】002 -- 通用CRUD(插入、更新、删除、查询)

news2024/11/28 8:36:40

目录

3、通用CRUD

3.1 插入操作

3.1.1 方法定义

3.1.2 测试用例

3.1.3 测试

3.1.4 @TableField

3.2 更新操作

3.2.1 根据id更新

3.2.2 根据条件更新

3.3 删除操作

3.3.1 根据id删除(deleteById)

3.3.2 根据Map删除数据(deleteByMap)

3.3.3 根据Wrapper删除数据 (delete)

3.3.4 根据id集合批量删除 (deleteBatchIds)

3.4 查询操作

3.4.1 根据ID查询 (selectById)

3.4.2 根据ID 批量查询(selectBatchIds)

3.4.3 根据 entity 条件,查询一条记录 (selectOne)

3.4.4 根据wrapper条件,查询总记录数(selectCount)

3.4.5 根据 entity 条件,查询全部记录(selectList)

3.4.6 根据 entity 条件,查询全部记录并翻页(selectPage)

3.5 SQL注入的原理


3、通用CRUD

通过前面的学习,我们了解到通过继承BaseMapper就可以获取到各种各样的单表操作,接下来我们将详细讲解这些操作

3.1 插入操作

3.1.1 方法定义

3.1.2 测试用例

@RunWith 就是一个运行器

@RunWith(JUnit4.class) 就是指用JUnit4来运行

@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境

@ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件

单个文件

@ContextConfiguration(Locations=“classpath:applicationContext.xml”)

@ContextConfiguration(classes = SimpleConfiguration.class)

多个文件时,可用{}

@ContextConfiguration(locations = { “classpath:spring1.xml”, “classpath:spring2.xml” })

SpringBoot2.2.0以前是JUnit4,在SpringBoot之后是JUnit5,对于Junit4而言,所有的测试方法应当是public声明的,而Junit5不用

3.1.3 测试

id生成策略不对:

如何设置id的生成策略呢?

MP支持的id策略:

我们要修改User对象,指定id类型为自增长:

再次测试,数据插入成功:

3.1.4 @TableField

在MP中通过@TableField注解可以指定字段的一些属性,常常解决的问题有2个:

1、对象中的属性名和字段名不一致的问题(非驼峰)

2、对象中的属性字段在表中不存在的问题

使用:

其他用法,如大字段不加入查询字段:(即,查询时不返回该字段的值)

效果:

3.2 更新操作

在MP中,更新操作有2种,一种是根据id更新,另一种是根据条件更新

3.2.1 根据id更新

方法定义:

测试用例:

测试结果:

数据库结果:

3.2.2 根据条件更新

方法定义:

测试用例:(QueryWrapper没有set方法,只能通过创建对象,通过对象来调用set方式,从而实现属性值的更新;而UpdateWarpper可以直接使用set方法指定数据库表字段名进行对应的修改)

PSwrapper:意为 封装

或者,通过UpdateWrapper进行更新:

测试结果:

关于wrapper更多的用法后面会有详细讲解

3.3 删除操作

3.3.1 根据id删除(deleteById)

方法定义:

测试用例:(这里指定id为 6L 的原因是因为id的类型为 long

结果:

数据被删除:

3.3.2 根据Map删除数据(deleteByMap)

方法定义:

测试用例:(Map中的元素相当于where语句,多条件之间是 and 关系)

结果:

3.3.3 根据Wrapper删除数据 (delete)

方法定义:

测试用例:(根据包装的参数进行删除)

wrapper有两种写法:

推荐使用第二种用法,因为该用法不用手写字段名,减少了错误可能发生的概率

结果:

3.3.4 根据id集合批量删除 (deleteBatchIds)

方法定义:

测试用例:

结果:

3.4 查询操作

MP提供了多种查询操作,包括根据id查询、批量查询、查询单条数据、查询列表、分页查询等操作

3.4.1 根据ID查询 (selectById)

方法定义:

测试用例:(如果查询的数据不存在,则会返回null)

结果:

3.4.2 根据ID 批量查询(selectBatchIds)

方法定义:

测试用例:(集合中的元素即为查询条件)

结果:

3.4.3 根据 entity 条件,查询一条记录 (selectOne)

方法定义:

测试用例:

结果:

如果要查询的数据超过一条时,会抛出异常:

3.4.4 根据wrapper条件,查询总记录数(selectCount)

方法定义:

测试用例:(eq:等于,gt:大于)

结果:

 

3.4.5 根据 entity 条件,查询全部记录(selectList)

方法定义:

 

测试用例:(like:以%val%的形式进行模糊查找)

 

结果:

3.4.6 根据 entity 条件,查询全部记录并翻页(selectPage)

方法定义:(首先要配置MP底层提供的一个分页插件PaginationInterceptor)

配置分页插件:(【Java Web】014 -- SpringBoot原理(配置优先级、Bean管理、SpringBoot原理 中的bean管理内容,通过声明配置类来管理第三方bean对象)

测试用例:(查询用户表中年龄大于20岁的用户)

结果:

3.5 SQL注入的原理

前面我们已经知道,MP在启动后会将BaseMapper中的一系列的方法注册到mappedStatements那么究竟是如何注入的呢?流程又是怎么样的?下面我们将一起来分析下。

在MP中,ISqlInjector负责SQL的注入工作,它是一个接口,AbstractSqlInjector是它的实现类,实现关系如下:

AbstractSqlInjector中,主要是由inspectInject()方法进行注入的,如下:

 

在实现方法中, methodList.forEach(m -> m.inject(builderAssistant, mapperClass,modelClass,tableInfo)); 是关键,循环遍历方法,进行注入。 

最终调用抽象方法injectMappedStatement进行真正的注入:

查看该方法的实现:

以SelectById为例查看:

 

可以看到,生成了SqlSource对象,再将SQL通过addSelectMappedStatement方法添加到mappedStatements

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

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

相关文章

程序员必备技巧:Git 和 GitHub 中高效地将单个文件还原为特定提交

Git 和 GitHub 用于存储您的旧代码,允许您在出现问题时回滚并安全地恢复以前的准确代码。 与其他开发人员协作时,了解如何将单个文件恢复为特定提交也变得至关重要。这是因为,在处理某个功能时,您可能需要修改不相关的文件来测试…

Cursor编程初体验,搭载GPT-4大模型,你的AI助手,自然语言编程来了

背景 这两天体验了下最新生产力工具Cursor,基于最新的 GPT-4 大模型,目前免费,国内可访问,不限次数,跨平台,你确定不来体验一把?官方的 Slogan : Build Software. Fast. Write, edi…

【CSS】课程网站 Banner 制作 ② ( Banner 栏版心盒子测量 | Banner 版心盒子模型左侧导航栏代码示例 )

文章目录一、Banner 栏版心盒子测量1、测量版心元素尺寸2、课程表测量二、Banner 版心盒子模型左侧导航栏代码示例1、HTML 标签结构2、CSS 样式3、展示效果一、Banner 栏版心盒子测量 1、测量版心元素尺寸 拉四条辅助线 , 将版心包起来 , 可以测量 Banner 条版心的尺寸为 1200 …

Nginx网站服务详解(第二部分:Nginx服务的主配置文件 ——nginx.conf)

1. 全局配置的六个模块简介 全局块:全局配置,对全局生效;events块:配置影响 Nginx 服务器与用户的网络连接;http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置&…

SLBR通过自校准的定位和背景细化来去除可见的水印

一、简要介绍 本文简要介绍了论文“Visible Watermark Removal via Self-calibrated Localization and Background Refinement ”的相关工作。在图像上叠加可见的水印,为解决版权问题提供了一种强大的武器。现代的水印去除方法可以同时进行水印定位和背景恢复&#…

C++ 实现 Matlab 的 lp2lp 函数

文章目录1. matlab 的 lp2lp 函数的作用2. matlab 的 lp2lp 函数的使用方法3. C 实现3.1 complex.h 文件3.2 lp2lp.h 文件4. 测试结果4.1 测试文件4.2 测试3阶的情况4.3 测试9阶的情况1. matlab 的 lp2lp 函数的作用 去归一化 H(s) 的分母 2. matlab 的 lp2lp 函数的使用方法…

人脸识别经典网络-MTCNN(含Python源码实现)

人脸检测-mtcnn 本文参加新星计划人工智能赛道:https://bbs.csdn.net/topics/613989052 文章目录人脸检测-mtcnn1. 人脸检测1.1 人脸检测概述1.2 人脸检测的难点1.3 人脸检测的应用场景2. mtcnn2.1 mtcnn概述2.2 mtcnn的网络结构2.3 图像金字塔2.4 P-Net2.5 R-Net2…

为什么说过早优化是万恶之源?

Donald Knuth(高德纳)是一位计算机科学界的著名学者和计算机程序设计的先驱之一。他被誉为计算机科学的“圣经”《计算机程序设计艺术》的作者,提出了著名的“大O符号”来描述算法的时间复杂度和空间复杂度,开发了TeX系统用于排版…

开启数字新时代,5G-Advanced加速带入现实!

在过去的这些年里,我们亲眼见证了5G的崛起。据GSMA&GSA统计,截至2022年12月,全球共部署了超过240张5G商用网络,5G用户超过10亿。在韩国、瑞士、芬兰等地,5G用户渗透率已超过30%。中国的5G网络建设更是独领风骚。截…

形式语言与自动机总结---上下文无关文法(CFG)

第5章上下文无关文法: 设计文法: 做题的时候发现了一个正则表达式到文法的算法 R规则 根据正则式推导右线性文法_右线性文法表达ab*_Pluto 的博客-CSDN博客 举例 设计文法的关键在于理解递归性,文法是一个迭代器 1.The set {| i ≠ j or j ≠ k}, that is, the set of st…

AIGC时代,分享11款超实用AI生成内容检测工具

前往未来百科查看全部AI内容检测工具箱 一、AI 内容检测器 在数字内容创作的世界中,高质量的内容对至关重要。但随着创建的内容量不断增加,确保内容是原创的、高质量的非常具有挑战性。 AI 内容检测器指的是一种利用人工智能技术来自动化审核和识别不当…

进程优先级

目录: 1.进程优先级的概念 2.查看进程优先级的方案 3.linux当中进程的优先级共有40个级别 4.对于进程的其它概念 ---------------------------------------------------------------------------------------------------------------------- 1.进程优先级的概念 为…

Talk预告 | ICLR‘23 斯坦福大学计算机系博士后吴泰霖:学习可控的自适应多分辨率物理仿真

本期为TechBeat人工智能社区第478期线上Talk! 北京时间3月8日(周三)20:00,斯坦福大学计算机系博士后——吴泰霖的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “学习可控的自适应多分辨率物理仿真”,届时将分…

灌区泵站及闸门控制自动化系统

根据灌区泵站及闸门控制现状,利用智能终端与互联网相结合方法,实施取水、输水、供水、灌溉、排水、防洪和水资源管理等自动控制系统,实现骨干渠道灌排闸门现场及远程自动控制和远程监测监视,达到计划配水、精准灌溉,高…

AJAX起步入门——介绍和使用

Ajax起步入门——介绍和使用基本用例场景复现核心干货AJAX简介ajax是什么?ajax工作原理ajax是基于现有的Internet标准AJAX实例实例演示实例代码ajax实例解析场景复现 最近学习与前端相关的小程序时,接触了异步请求api的封装和实现,涉及到了很…

多线程并发编程笔记07(小滴课堂)容器

同步容器 我们写这样一段代码。 我们想对vector容器在遍历时,去根据条件删除: 会出现异常。 那正确的方式应该如何去写呢,这里就涉及到了迭代器: 单线程中我们是这么做的。 那么多线程中呢? 有的时候它会报这个错误…

ChatGPT最强对手Claude使用教程

Cladue最近很火,作为ChatGPT4的平替版,它无需付费,使用方便,很多网友通过效果对比,发现它的性能要好于ChatGPT3.5,可以媲美ChatGPT4。最主要是使用很方便,十分钟就可以轻松部署,下面…

MongoDB初认识

MongoDB初认识 文章目录MongoDB初认识0. 写在前面1. MongoDB是什么2. MongoDB的优缺点3. 基础概念解析4. 安装4.1 下载地址4.2 安装MongoDB4.3 pgrep使用4.4 进入 shell 交互页面0. 写在前面 Linux版本:CentOS7.5 MongoDB版本:MongoDB-5.0.2&#xff08…

asp.net博客管理系统统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net博客管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 。 二、功能介绍 普通的用户是 123 密…

国产化ChatGPT来袭,景联文科技提供专业数据采集标注服务,人手一个专属ChatGPT或成为可能

ChatGPT作为一个颠覆性的创新,现已成为火爆全球的智能应用。 自ChatGPT爆火以来,国内科技圈开始频频发力,多家科技和互联网公司纷纷表示将开发出中国本土化的ChatGPT。 以百度为例,3月16日,百度推出新一代知识增强大语…