MybatisPlus 用法

news2024/11/16 7:29:09

MybatisPlus 用法--wrapper的用法

    • MybatisPlus 原理
    • 常见wrapper的用法
    • eq等值查询 与 ne不等值查询
    • gt 大于 与 ge 大于等于、lt小于与le小于等于
    • between 在某个区间内 与 notBetween不在某个区间内
    • in在范围内的值 与 notIn不在范围内的值
    • inSql、notInSql(几乎用不到)
    • orderBy、orderByAsc(升序)、orderByDesc(降序)
    • like 、likeLeft、likeRight、notLike
    • isNull空值查询 与 isNotNull 非空值查询
    • or、and
    • 总结一下:
    • 业务中常用的QueryWrapper总结
    • QueryWrapper 与 LambdaQueryWrapper的区别

MybatisPlus 原理

Mp 初体验:

  1. 创建mysql表格
  2. 创建entity,加上注解@Data
  3. 创建Mapper,继承BaseMapper,这时注意泛型要与实体类对应
  4. 直接使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

MP原理:

MP是怎么识别到该操作那张表的?

  1. 扫描实体类
  2. 根据实体类来分析,要操作数据库的那张表
  3. 再自动生成操作表的sql语句

所以说,重点是实体类要与表中的表名对起来

在这里插入图片描述

常见wrapper的用法

在这里插入图片描述

eq等值查询 与 ne不等值查询

// 查询name=flx   age=26的人
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
wrapper.eq("name", "flx")
       .eq("age", 26);
       
List<User> userList = userMapper.selectList(queryWrapper);


// 查询 name!=flx age!=26的人
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne("name","flx")
            .ne("age",10)

List<User> userList = userMapper.selectList(queryWrapper);

当只想进行简单的条件链接时,只需将查询条件直接连写即可,拼装后的sql就是用and连接的

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
wrapper.eq("name", "flx")
       .eq("age", 26);
       
List<User> userList = userMapper.selectList(queryWrapper);

// sql
where name=flx and age=26

gt 大于 与 ge 大于等于、lt小于与le小于等于

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// age > 10
queryWrapper.gt("age",10)
List<User> userList = userMapper.selectList(queryWrapper);

// age >= 10
queryWrapper.ge("age",10)
List<User> userList = userMapper.selectList(queryWrapper);

// age < 10
queryWrapper.lt("age",10)
List<User> userList = userMapper.selectList(queryWrapper);

// age <= 10
queryWrapper.le("age",10)
List<User> userList = userMapper.selectList(queryWrapper);

between 在某个区间内 与 notBetween不在某个区间内

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 年龄在18岁到25岁之间的
queryWrapper.between("age", 18,25);
List<User> userList = userMapper.selectList(queryWrapper);


// 年龄不在18岁到25岁之间的
queryWrapper.notBetween("age", 18,25);
List<User> userList = userMapper.selectList(queryWrapper);

in在范围内的值 与 notIn不在范围内的值

QueryWrapper<User> queryWrapper = new QueryWrapper<>();

//查询到list集合
List<Type> typeList = typeService.selectById(id);
//结果集
List<String> typeList = new ArrayList<>();
//遍历集合取值
typeList.forEach(item->{
      typeList.add(item.getType());
});

// in 在范围内的值
queryWrapper.in("type", typeList);
List<User> userList = userMapper.selectList(queryWrapper);


// notIn 在范围内的值
queryWrapper.notIn("type", typeList);
List<User> userList = userMapper.selectList(queryWrapper);

inSql、notInSql(几乎用不到)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();

// SELECT * FROM user WHERE (id IN (select id from user where name = flx))
queryWrapper.inSql("id", "select id from user where name = flx");
List<User> userList = userMapper.selectList(queryWrapper);

orderBy、orderByAsc(升序)、orderByDesc(降序)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();

// SELECT id,name,email,age FROM user ORDER BY name ASC
queryWrapper.orderByAsc("name");
List<User> userList = userMapper.selectList(queryWrapper);

// SELECT id,name,email,age FROM user ORDER BY name ASC
queryWrapper.orderByAsc("name","age");
List<User> userList = userMapper.selectList(queryWrapper);


queryWrapper.orderByDesc("name");
List<User> userList = userMapper.selectList(queryWrapper);

like 、likeLeft、likeRight、notLike

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//  "%flx%" 模糊查询
queryWrapper.like("name","flx");
List<User> userList = userMapper.selectList(queryWrapper);

//  "%flx" 模糊查询
queryWrapper.likeLeft("name","flx");
List<User> userList = userMapper.selectList(queryWrapper);

//  "flx%" 模糊查询
queryWrapper.likeRight("name","flx");
List<User> userList = userMapper.selectList(queryWrapper);


//  "%flx%" 模糊查询不成立的值
queryWrapper.notLike("name","flx");
List<User> userList = userMapper.selectList(queryWrapper);

isNull空值查询 与 isNotNull 非空值查询

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// name 是 空值的数据
queryWrapper.isNull("name");
List<User> userList = userMapper.selectList(queryWrapper);

// name 不是 空值的数据
queryWrapper.isNotNull("name");
List<User> userList = userMapper.selectList(queryWrapper);

or、and

查询条件直接连写即可,拼装后的sql就是用and连接的
如果想用() 来区分sql的执行的代码块,可以用and
麻烦的其实可以直接在xml文件中写,没必要按照他的套路来

WHERE id = '1' 
	AND (name LIKE '%flx%'
	OR email LIKE '%163%')
QueryWrapper<User> queryWrapper = new QueryWrapper<>();

queryWrapper.eq("id",1);
queryWrapper.and(wrapper->wrapper.like("name","flx")
                                .or()
                                .like("email","163")
                             

总结一下:

一 运算符
eq等值查询 与 ne不等值查询
gt 大于 与 ge 大于等于、lt小于与le小于等于
其实就是where后面的 = 、!= 、>、>=、<、<=

二 区间内查询
between 在某个区间内 与 notBetween不在某个区间内
in在范围内的值 与 notIn不在范围内的值
inSql 范围内查询,后面跟的是自定义sql语句
其实就是在固定区间 与 自定义区间的查询

三 排序
orderBy、orderByAsc(升序)、orderByDesc(降序)

四 模糊查询 与 非空查询
like 、likeLeft、likeRight、notLike
isNotNull

业务中常用的QueryWrapper总结

QueryWrapper<User> queryWrapper = new QueryWrapper<>();

// WHERE name LIKE '%雨%' AND age BETWEEN 20 AND 40 AND email IS NOT NULL
queryWrapper.like("name", "雨").between("age", 20, 40).isNotNull("email");

//  WHERE manager_id IN (select id from user where name like '王%')
queryWrapper.inSql("manager_id", "select id from user where name like '王%'");

// WHERE age IN (?,?,?)
queryWrapper.in("age", Arrays.asList(30, 31, 32));
// select * from user where deleted=0 and name is not null and age>12
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("deleted",0).isNotNull("name").gt("age",12)



QueryWrapper 与 LambdaQueryWrapper的区别

唯一区别就是 LambdaQueryWrapper可以通过获取Lambda数据库列名

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

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

相关文章

Android——基本控件(下)(十五)

1. 对话框&#xff1a;Dialog 1.1 知识点 &#xff08;1&#xff09;掌握对话框的主要作用&#xff1b; &#xff08;2&#xff09;可以使用AlertDialog和AlertDialog.Builder进行对话框的建立&#xff1b; &#xff08;3&#xff09;可以通过LayoutInflater进行定制对话框…

前端JavaScript入门-day02

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一.运算符 1.1 赋值运算符 1.2 一元运算符 自增运算符的用法&#xff1a; 1.3 比较运算符 比较运算符…

超越竞争,使用Framework技术赢得市场份额

Framework为什么这么重要&#xff1f; 在Android开发中&#xff0c;Framework&#xff08;框架&#xff09;是非常重要的&#xff0c;因为它提供了一套已经实现的软件组件和工具&#xff0c;以支持开发者构建应用程序。以下是Framework在Android开发中的重要性&#xff1a; 提…

云服务器到期,站点迁移,Nginx配置SSL以备后续只需!

导言 笔者小站&#xff1a;秋码分享 在这三年中&#xff0c;其实远不止这三年&#xff0c;可追溯到2014年前后&#xff0c;个人站点便逐渐走向末路。但却总有新的个人博客网站&#xff0c;在这片互联网海洋漂浮着&#xff0c;或许是为了心中的梦想&#xff0c;亦或是记录着工作…

Kafka 从安装到应用

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

MySQL实战解析底层---幻读是什么,幻读有什么问题?

目录 前言 幻读是什么&#xff1f; 幻读有什么问题&#xff1f; 如何解决幻读&#xff1f; 前言 为了便于说明问题&#xff0c;这一篇文章&#xff0c;就先使用一个小一点儿的表建表和初始化语句如下&#xff1a; 这个表除了主键id外&#xff0c;还有一个索引c&#xff0c…

web值控制标签的显示与隐藏、document、getElementById、style、css、hidden、display、visibility

文章目录 方式一方式二方式三visibility小结 方式一 使用HTML的hidden属性&#xff0c;隐藏后不占用原来的位置 hidden属性是一个Boolean类型的值&#xff0c;如果想要隐藏元素&#xff0c;就将值设置为true&#xff0c;否则就将值设置为false 选取id为test的元素 let test do…

“事后达尔文”—— 游戏业务效果评估方法实践

作者&#xff1a;vivo 互联网数据分析团队 Luo Yandong、Zhang Lingchao 本文介绍了互联网业务数据效果评估的几种常见问题及方法&#xff0c;并基于分层抽样的逻辑优化出一套可应用于解决用户不均匀的“事后达尔文"分析法&#xff0c;可适用于无法AB测试或人群不均匀的AB…

VCO的设计

理想振荡器只有电感和电容&#xff0c;会一直振荡下去。但是实际的振荡器存在一定的寄生电阻并联在RC两端&#xff0c;会使振幅变小。因此需要RC旁边再并联一个负电阻以此来抵消寄生电阻的影响。一般会选择负阻提供的能量为寄生电阻能量的的2-3倍。如果负阻跟RC并联&#xff0c…

剖析float相加产生精度损失的原因

float相加产生精度损失的原因 一、什么是float类型及其特点1.1、float类型的定义和使用方法1.2、float类型的特点&#xff0c;包括精度限制 二、为什么会出现float相加精度损失2.1、计算机二进制存储浮点数的方式2.2、浮点数运算中的舍入误差2.3、累加多个小数时的误差累积 三、…

kali中Metasploit基本使用方法

1.kali启动postgresql并设置开机自启动 systemctl start postgresql.servicesystemctl enable postgresql.service2.kali启动Metasploit 方式一:应用程序 -> 漏洞利用工具集 -> Metasploit framework 方式二: msfconsole 3. Metasploit常用命令 connect 命令 连接远程主…

Qt信号槽之connect介绍(上)

关于Qt信号槽中connect与disconnect介绍 首先我们要知道&#xff0c;如果想要使用Qt中的信号槽机制&#xff0c; 那么必须继承QObject类&#xff0c;因为QObject类中包含了信号槽的一系列操作&#xff0c;今天我们来讲解的是信号与槽怎么建立连接以及断开连接。 一、connect …

在windows server上用Mosquitto软件创建MQTT服务器

今天下午捣鼓了半天&#xff0c;在云服务器上面创建了个MQTT服务器&#xff0c;然后用MQTTX软件进行了测试。过程记录如下&#xff1a; 1、下载mosquitto软件&#xff0c;链接如下图&#xff1a; 2、下载完成后安装&#xff0c;一直点下一步下一步就好了。 3、在安装路径下&am…

快速捡回使用workbench控制mysql创建数据库的基本步凑

首先如果&#xff0c;不想要在原来已经建好的数据库下建立数据表&#xff0c;可以新建数据库。 具体操作步凑如下&#xff1a; 选择后如下所示&#xff1a; 有现成的创建代码的话&#xff0c;就直接复制执行现成的创建代码即可&#xff0c;如果没有现成的创建代码的话&#xff…

Java设计模式之单例模式-【懒汉式与饿汉式】

1、单例&#xff0c;模式 单例模式属于创建型模式的一种&#xff0c;应用于保证一个类仅有一个实例的场景下&#xff0c;并且提供了一个访问它的全局方法 单例模式的特点&#xff1a;从系统启动到终止&#xff0c;整个过程只会产生一个实例。单例模式常用写法&#xff1a;懒汉…

STM32设置为I2C从机模式

STM32设置为I2C从机模式 目录 STM32设置为I2C从机模式前言1 硬件连接2 软件编程3 运行测试3.1 I2C连续写入3.1 I2C连续读取3.1 I2C单次读写测试 4 总结 前言 STM32的I2C作为主机的情况相信很多同学都用过&#xff0c;网上也有很多教程&#xff0c;但是作为从设备使用的例子应该…

【C++ 程序设计】第 9 章:函数模板与类模板

目录 一、函数模板 &#xff08;1&#xff09;函数模板的概念 &#xff08;2&#xff09;函数模板的示例 &#xff08;3&#xff09;函数或函数模板调用语句的匹配顺序 二、类模板 &#xff08;1&#xff09;类模板概念 &#xff08;2&#xff09;类模板示例 &…

阵列模式综合第三部分:深度学习(附源码)

一、前言 这个例子展示了如何设计和训练卷积神经网络&#xff08;CNN&#xff09;来计算产生所需模式的元素权重。 二、介绍 模式合成是阵列处理中的一个重要课题。阵列权重有助于塑造传感器阵列的波束图案&#xff0c;以匹配所需图案。传统上&#xff0c;由于空间信号处理和频…

SSL工作原理

SSL 是一个安全协议&#xff0c;它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议&#xff08;HTTP&#xff09;使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算法&#xff08;如 DES 或 RC4&#xff09;进行加密的。公…

使用ZenDAS进行Gompertz趋势分析

某项目做了18次测试&#xff0c;每次测试发现的缺陷个数如下表所示&#xff1a; 测试序号 发现缺陷数 1 60 2 96 3 157 4 191 5 155 6 106 7 64 8 335 9 92 10 196 11 109 12 133 13 166 14 129 15 16 16 30 17 19 18 5 对上述的数据在Z…