当前位置: 首页 > news >正文

mybatis-plus中多条件查询使用and合or嵌套使用

背景

       在实际项目中,数据库条件查询经常需有一些复杂的查询条件的SQL语句,将这些SQL语句用mybatis-plus 组件的实现的时候经常会费一些时间,下面对几种常见的SQL语句实现做个介绍以方便以后遇到时少走弯路提高开发效率。

案例
@Data

public class User{

private Integer id;

private String name;

private Integer age;

private DateTime updateTime;

private Integer deleted;

private String status;

}

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

例1:like("name", "BNTang").or().between("age", 20, 30);

// 多条件Update修改修改值

User user = new User();

user.setAge(99);

user.setName("BNTang6666");

// 修改条件

UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();

userUpdateWrapper

.like("name", "BNTang").or().between("age", 20, 30);

int result = userMapper.update(user, userUpdateWrapper);

System.out.println(result);

sql 为:

UPDATE USER SET NAME = 'BNTang6666,age=99,update_time = '2021-03-27 00:40:27'

WHERE deleted = 0 AND NAME LIKE '%BNTang%' OR age BETWEEN 20 AND 30

例2:eq(“id”,1).or().eq(“name”,“老王”)

sql :id = 1 or name = ‘老王’

例3:wrapper.eq(“age”,30).or(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))

sql:
age=30 or (name = ‘李白’ and status <> ‘活着’)

例4: and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))

sql: and (name = ‘李白’ and status <> ‘活着’)

例5:wrapper.like(“name”, “BNTang”).or().between(“age”, 20, 30);

sql:

NAME LIKE '%BNTang%' OR age BETWEEN 20 AND 30

例6:wrapper.and(wrapper->wrapper.eq(“SEND_USER_ID”,“001”).eq(“RECEIVE_USER_ID”,“002”))

.or(wrapper->wrapper.eq(“SEND_USER_ID”,“003”).eq(“RECEIVE_USER_ID”,“004”));

sql:

AND ((SEND USER ID = “001” AND RECEIVE USER ID = “002”) OR (SEND USER ID =“003” AND RECEIVE USER ID = “004”))

例7:wrapper.eq(“name”, “wangsf”).nested(w->w.and(wp->wp.in(“contract_mode”, (Object[]) “5,6”.split(“,”)).ge(“actual_completion_time”, now.minusYears(2).format(fmt) + " 23:59:59")).or(wp->wp.notIn(“contract_mode”, (Object[]) “5,6”.split(“,”)).ge(“actual_completion_time”, now.minusYears(5).format(fmt) + " 23:59:59")));

sql:

name = ? AND ((contract_mode IN (?,?) AND actual_completion_time BETWEEN ? AND ?) OR (contract_mode NOT IN (?,?) AND actual_completion_time BETWEEN ? AND ?))

相关文章:

  • Function Calling学习
  • 开源数据库同步工具DBSyncer
  • Altium Designer软件下载安装「专业PCB设计软件」Altium Designer安装包获取!
  • 【Linux 网络编程】协议的分层知识!
  • 专项技能训练五《云计算网络技术与应用》实训9 使用openVPN建立小型企业内网VPN环境
  • C语言 指针——指针变量的定义、初始化及解引用
  • 串口通信问题排查总结
  • Flink 对接 Hudi 查询数据,java代码编写
  • Windows驱动开发系列文章一
  • Deepin Linux 深度 V23 beige 官方源及换镜像源方法。
  • 【MySQL精通之路】优化
  • 一千题,No.0037(组个最小数)
  • 2021职称继续教育--中国共产党的光辉历程及其经验
  • 服务器的远程桌面无法连接,服务器远程桌面无法连接问题处理教程
  • nginx配置文件
  • 【Leetcode】101. 对称二叉树
  • [译]前端离线指南(上)
  • 【347天】每日项目总结系列085(2018.01.18)
  • CSS 三角实现
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ECMAScript6(0):ES6简明参考手册
  • flutter的key在widget list的作用以及必要性
  • IDEA常用插件整理
  • iOS 系统授权开发
  • JAVA多线程机制解析-volatilesynchronized
  • MobX
  • Object.assign方法不能实现深复制
  • Objective-C 中关联引用的概念
  • Python socket服务器端、客户端传送信息
  • Python_网络编程
  • Quartz初级教程
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 翻译:Hystrix - How To Use
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 大数据全解:定义、价值及挑战
  • ​渐进式Web应用PWA的未来
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #HarmonyOS:Web组件的使用
  • #include<初见C语言之指针(5)>
  • #Z0458. 树的中心2
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (javascript)再说document.body.scrollTop的使用问题
  • (k8s)Kubernetes本地存储接入
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (pojstep1.1.2)2654(直叙式模拟)
  • (ZT)一个美国文科博士的YardLife
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题