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

news/2024/11/24 20:15:07/

文章目录

  • 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查询

如下代码所示:

 @Testvoid 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查询

如下代码所示:

 @Testvoid 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.ppmy.cn/news/21586.html

相关文章

电子仿真软件MultiSIM

Multisim是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具&#xff0c;适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式&#xff0c;具有丰富的仿真分析能力。 目前MultiSIM最新版本为14.2&#xff0c;可通过NI的…

RPA自动化办公06——Uibot中的UB编程语言基础

参考&#xff1a;UB语言参考_UiBot开发者指南 虽然Uibot用命令就行&#xff0c;但是编程习惯会让程序员们更喜欢看源代码&#xff0c;有时候写源代码会更加方便&#xff0c;所有要学习UB的语言基础。 它很简单&#xff0c;和Python很像&#xff0c;下面简单了解一个各种基础语…

南京小米java面经(一面)

目录1.java支持多继承吗2.线程的生命周期3.线程和进程的区别4.单例模式有几种5.写一下双重锁的单例6.jvm有哪些区域7.jvm哪些区域是线程共享的&#xff0c;哪些是线程私有的8.gc中判断对象可回收的方式有哪些9.gc垃圾回收算法有哪些10.哪些对象可以作为gc root11.gc中的引用计数…

POE交换机全方位解读(中)

POE供电距离到底怎么算 只针对符合IEEE802.3af/at 标准PoE设备 ① 网线对供电距离的影响 首先我们先来看下表IEEE802.af和IEEE802.3at标准中对Cat5e网线要求&#xff1a; 说明&#xff1a;Type 1 value和Type 2 value 分别指IEEE802.3af和IEEE802.3at的要求。 从表中可以看出&a…

tf.keras.layers.Embedding() 详解

Embedding layery 参数如下&#xff1a; tf.keras.layers.Embedding(input_dim,output_dim,embeddings_initializer"uniform",embeddings_regularizerNone,activity_regularizerNone,embeddings_constraintNone,mask_zeroFalse,input_lengthNone,**kwargs ) 输入…

PowerCLi 批量多esxi主机创建登陆用户

官网PowerCLI参数配置参考 New-VMHostAccount 创建用户参考New-VIRole 创建权限组参考Get-VIPrivilege 查询所有角色层配置信息参考创建批量多主机esxi登陆用户一键脚本 <

【string类的简单模拟实现】

目录 1 类中成员变量的声明 2 迭代器 3 一些常用接口 4 六大默认函数 4.1 构造 4.2 拷贝构造 4.3 赋值运算符重载 4.4 析构 5 开空间&&增删查改 6 其他运算符重载 1 类中成员变量的声明 通过上一篇文章对string类的简单使用相信大家对于string类中成员变量已…

【快速开始】vuejs环境搭建第一个项目

本篇包含vuejs环境安装以及通过vue客户端快速创建运行第一个项目。(注&#xff1a;以下内容均已windows平台为基准) 目录&#xff1a; 一、安装nodejs 二、配置国内源加速 三、安装vue客户端 四、创建第一个应用 1、安装nodejs&#xff1a; 1.1、下载 官网下载地址&…