全网最详细的mybatis plus 条件构造器queryWrapper学习,比如and(),eq(),or(),like()等方法以及分页操作

news2024/11/24 2:51:09

文章目录

  • 1. 引言
  • 2. 结构关系
  • 3. 环境配置
    • 3.1 引入jar包
    • 3.2 创建数据源
    • 3.2 创建User实体类
    • 3.4 创建UserMapper类
    • 3.5 创建UserService类
  • 4. 操作演示
  • 5. 注意事项

1. 引言

mybatis大家都有使用过,既面向对象又灵活可配。不友好的地方是,会随着使用出现大量xml文件和SQL语句。

此时,mybatis-plus应运而生,对mybatis做了无侵入增强,还可以简化SQL语句,或者不写SQL语句。

  1. MyBatis-Plus官网:https://mp.baomidou.com

  2. MyBatis-Plus官方文档:https://baomidou.com/pages

  3. 码云项目地址:https://gitee.com/baomidou/mybatis-plus

  4. GitHub地址:https://github.com/baomidou/mybatis-plus

  5. MyBatis-Plus开发组织:https://gitee.com/baomidou

2. 结构关系

queryWrappermybatis plus中实现查询的对象封装操作类,其层级关系如下:

在这里插入图片描述

上图的字段解释:

  • Wrapper: 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示

  • AbstractWrapper: 用于查询条件封装,生成sqlwhere条件

  • AbstractLambdaWrapperLambda语法使用Wrapper统一处理解析lambda获取column

  • LambdaQueryWrapper:看名称也能明白就是用于Lambda语法使用的查询Wrapper

  • LambdaUpdateWrapperLambda更新封装Wrapper

  • QueryWrapperEntity对象封装操作类,不是用lambda语法

  • UpdateWrapperUpdate条件封装,用于Entity对象更新操作

3. 环境配置

3.1 引入jar包

<properties>
 	<java.version>1.8</java.version>
 	<baomidouMybatisPlus.version>3.5.2</baomidouMybatisPlus.version>
</properties>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${baomidouMybatisPlus.version}</version>
</dependency>

3.2 创建数据源

CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `nick_name` varchar(255) NOT NULL,
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8;

INSERT INTO `user` VALUES (1, 'chenxier', '陈希尔', 18);
INSERT INTO `user` VALUES (2, 'zhangsan', '张三', 22);
INSERT INTO `user` VALUES (3, 'lisi', '李四', 20);
INSERT INTO `user` VALUES (4, 'wanger', '王二', 23);

3.2 创建User实体类

如果User实体类中的某属性名称和数据表中对应的字段名称一致,TableField注解可写可不写。

/**
 * @author 念兮为美
 * @create 2020-05-29 10:00
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
@TableName("user")
public class User implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;
  private String username;
  @TableField(value = "nick_name")
  private String nickname;
  private Integer age;
}

3.4 创建UserMapper类

因为UserMapper继承BaseMapper接口后,无需编写userMapper.xml文件,即可获得CRUD功能,如下所示:

/**
 * @author 念兮为美
 * @create 2020-05-29 10:13
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {

}

3.5 创建UserService类

/**
 * @author 念兮为美
 * @create 2020-05-29 10:54
 */
public class UserService extends ServiceImpl<UserMapper, User> {
  @Resource public UserMapper userMapper;
}

4. 操作演示

上述环境搭建完成后,我们即可实现queryWrapper的相关操作,如下列出常见的使用场景。

  1. 分页查询

queryWrapper做分页查询以及查询时的注意事项,在我的这篇博文中写的很详细,可以点击链接查看:详解Mybatis-Plus中分页插件PaginationInterceptor, MybatisPlusInterceptor在SpringBoot中的使用

  1. or查询

我们在使用queryWrapper的or查询时,这里存在一个小小的坑,可以参考我的这篇博文,写的很详细:mybatis框架中的queryWrapper的or查询,联想到MySQL中and 和or的关系

  1. eq查询

如下代码所示:

 @Test
  void contextLoads() {
    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.eq("username","chenxier");
    User one = userService.getOne(queryWrapper);
    System.out.println(JSONUtil.toJsonPrettyStr(one));
  }

输出结果:

JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@6212dc7d] will not be managed by Spring
==>  Preparing: SELECT id,username,nick_name,age FROM user WHERE (username = ?)
==> Parameters: chenxier(String)
<==    Columns: id, username, nick_name, age
<==        Row: 1, chenxier, 陈希尔, 18
<==      Total: 1
  1. like查询

如下代码所示:

 @Test
  void contextLoads() {
    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.like("username","chenxier");
    User one = userService.getOne(queryWrapper);
    System.out.println(JSONUtil.toJsonPrettyStr(one));
  }

从输出结果可以看到,如果我们使用.like方法时,querywrapper会自动加上%searchParam%,如下所示:

JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@4833bb83] will not be managed by Spring
==>  Preparing: SELECT id,username,nick_name,age FROM user WHERE (username LIKE ?)
==> Parameters: %chenxier%(String)
<==    Columns: id, username, nick_name, age
<==        Row: 1, chenxier, 陈希尔, 18
<==      Total: 1
  1. likeLeftlikeRight

    • likeLeft%查询,比如username like '%san'

    • likeRight%查询,比如username like 'zhang%'

具体如下代码所示:

@Test
void contextLoads() {
  QueryWrapper queryWrapper = new QueryWrapper();
  queryWrapper.likeLeft("username","san");
  queryWrapper.likeRight("username","zhang");
  User one = userService.getOne(queryWrapper);
  System.out.println(JSONUtil.toJsonPrettyStr(one));
}

输出结果如下:

JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3d4ea4cf] will not be managed by Spring
==>  Preparing: SELECT id,username,nick_name,age FROM user WHERE (username LIKE ? AND username LIKE ?)
==> Parameters: %san(String), zhang%(String)
<==    Columns: id, username, nick_name, age
<==        Row: 2, zhangsan, 张三, 22
<==      Total: 1

5. 注意事项

由于querywrapper的方法较多,大家可以参考如下表格进行实际操作。

在这里插入图片描述

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

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

相关文章

一篇文章带你读懂AVL树

目录 AVL树节点的定义 AVL树的插入 AVL树的旋转 1. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 2.新节点插入较高右子树的右侧---右右&#xff1a;左单旋 3. 新节点插入较高左子树的右侧---左右&#xff1a;先左单旋再右单旋 4. 新节点插入较高右子树的左侧-…

人工智能自然语言处理—PageRank算法和TextRank算法详解

人工智能自然语言处理—PageRank算法和TextRank算法详解 一、PageRank算法 PageRank算法最初被用作互联网页面重要性的计算方法。它由佩奇和布林于1996年提出&#xff0c;并被用于谷歌搜索引擎的页面排名。事实上&#xff0c;PageRank可以在任何有向图上定义&#xff0c;然后…

公司企业如何设计微信小程序?

​很多公司企业在制作小程序的时候都会考虑一个事情&#xff0c;就是如何设计微信小程序。有些公司企业希望把小程序设计得非常炫酷、抓人眼球。那么问题是&#xff1a;公司企业微信小程序的设计是否做得越酷炫、越抓人眼球就越好呢&#xff1f; 答案&#xff1a;非也&#xf…

基于SIFT的图像Matlab拼接教程

前言图像拼接技术&#xff0c;将普通图像或视频图像进行无缝拼接&#xff0c;得到超宽视角甚至360度的全景图&#xff0c;这样就可以用普通数码相机实现场面宏大的景物拍摄。利用计算机进行匹配&#xff0c;将多幅具有重叠关系的图像拼合成为一幅具有更大视野范围的图像&#x…

(一)Spring源码解析:容器的基本实现

一、Spring的整体架构 Spring的整体架构图如下所示&#xff1a; 二、容器的基本实现 2.1> 核心类介绍 2.1.1> DefaultListableBeanFactory DefaultListableBeanFactory是整个bean加载的核心部分&#xff0c;是Spring注册及加载bean的默认实现。 XmlBeanFactory集成自…

【FLASH存储器系列十四】固态硬盘结构和FTL初探

固态硬盘是一种典型的nand flash产品应用。与传统硬盘相化&#xff0c;固态硬盘内部没有移动的机械磁头&#xff0c;而是由固态电子存储芯片&#xff08;闪存芯片&#xff09;阵列级联组成&#xff0c;下图给出了固态硬盘的内部组成。现阶段&#xff0c;几乎所有基于闪存的固态…

ASP.NET Core+Element+SQL Server开发校园图书管理系统(三)

随着技术的进步&#xff0c;跨平台开发已经成为了标配&#xff0c;在此大背景下&#xff0c;ASP.NET Core也应运而生。本文主要基于ASP.NET CoreElementSql Server开发一个校园图书管理系统为例&#xff0c;简述基于MVC三层架构开发的常见知识点&#xff0c;前两篇文章简单介绍…

Nvidia深度学习环境安装

深度学习大型模型训练和部署&#xff0c;需要使用GPU&#xff0c;使用Pytorch、Tensorflow等深度学习框架之前需要安装驱动环境,本文系统环境&#xff1a;ubuntu22.04系统&#xff0c;四张3090显卡安装显卡驱动下载&#xff1a;选择显卡类型&#xff0c;下载驱动驱动下载路径&a…

Wireshark解析协议不匹配

Wireshark解析协议不匹配 1、问题 现有TLS/SSL over TCP的客户端、服务端相互通信&#xff0c;其中&#xff0c;服务端监听TCP端口6000。 使用tcpdump抓包6000端口&#xff0c;生成pcap文件6000.pcap&#xff1a; 使用Wireshark打开6000.pcap&#xff0c;显示如下&#xff1…

Hive(番外):Hive可视化工具IntelliJ IDEA

1 Hive CLI、Beeline CLI Hive自带的命令行客户端 优点&#xff1a;不需要额外安装 缺点&#xff1a;编写SQL环境恶劣&#xff0c;无有效提示&#xff0c;无语法高亮&#xff0c;误操作几率高 2 文本编辑器 Sublime、Emacs 、EditPlus、UltraEdit、Visual Studio Code等 有…

基于Seam Carving实现图像的重定位 附完整代码

相比于算法目标的复杂&#xff0c;算法步骤却异常的简单&#xff0c;下面具体介绍利用 SeamCarving 算法进行图像剪裁的步骤&#xff1a;1.计算图像中每个像素的“重要程度”&#xff08;能量&#xff09;&#xff0c;生成能量图。在绝大多数情况下&#xff0c;我们可以做出如下…

【string 类的使用方法(总结)】

1. 为什么学习string类&#xff1f; C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需要…

采用NVIDIA Jetson Orin NX 系统的视觉边缘计算机

边缘计算机采用NVIDIA Jetson Orin NX模块化系统和高带宽图像采集卡&#xff0c;用于实时图像采集计算和人工智能处理。虹科的合作伙伴Gidel是一家专注于高速图像采集和处理的以色列科技公司&#xff0c;今天宣布新的NVIDIA Jetson Orin NX™ 16GB模块化系统(SoM)将被添加到Gid…

SpringSecurity配置及使用

Spring Security 是针对Spring项目的安全框架&#xff0c;也是Spring Boot底层安全模块默认的技术选型&#xff0c;他可以实现强大的Web安全控制&#xff0c;对于安全控制&#xff0c;我们仅需要引入spring-boot-starter-security 模块&#xff0c;进行少量的配置&#xff0c;即…

什么是渲染农场,渲染农场一般怎么收费?

对于用3D软件创作效果图或影视动画的艺术家们来说&#xff0c;应该对渲染农场并不陌生&#xff0c;但是对于初入CG行业的人来说&#xff0c;看到网上很多人说渲染农场&#xff0c;肯定会疑惑&#xff0c;什么是渲染农场&#xff1f;渲染农场也叫“分布式并行集群计算系统”&…

【6】【vue3+elementplus+springboot】 管理系统 【前后端实践】

第一部分&#xff1a; elementplus官网&#xff1a;一个 Vue 3 UI 框架 | Element Plus (element-plus.org) 1、安装elementplus npm install element-plus --save查看package.json中存在依赖表示成功安装 2、引入elementplus import ElementPlus from element-plus import …

论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第5部分,完结篇)

文章目录&#x1f697; V. Vehicle Control&#xff08;车辆控制&#xff09;&#x1f534; A. Path Stabilization for the Kinematic Model&#xff08;基于运动学模型的路径稳定&#xff09;&#x1f7e5; 1&#xff09;Pure Pursuit&#xff08;纯追踪&#xff09;&#x1…

H3C SecParh堡垒机任意用户登录与远程执行代码漏洞

H3C SecParh堡垒机任意用户登录与远程执行代码漏洞1.H3C SecParh堡垒机任意用户登录漏洞1.1.漏洞描述1.2.漏洞影响1.3.漏洞复现1.3.1.登录页面1.3.2.构建URL1.4.总结2.H3C SecParh堡垒机远程命令执行漏洞2.1.漏洞描述2.2.漏洞影响2.3.漏洞复现2.3.1.登录页面2.3.2.构建URL2.4.总…

python-pptx 操作PPTx幻灯片文件删除并替换图片

python-pptx 操作PPTx幻灯片文件删除并替换图片 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、原理 通过查找ppt中的图片指纹替换 二、操作流程 原始ppt如下&#xff1a; 根据…

[单片机] MCU串口发送C方案优化

应用场景&#xff1a; 主频不高非操作系统的单片机&#xff0c;需要在while循环中发送 数据到上位机&#xff0c;当数据较长时&#xff0c;会让发送的过程会让其他操作有卡顿感。为了解决这个问题&#xff0c;需采用一种方法&#xff1a;在每次大循环中只发一个字节数据&#x…