Mybatis-Plus的条件构造器QueryWrapper UpdateWrapper详解

文章目录

    • 1. 引言
    • 2. Mybatis-Plus简介
    • 3. QueryWrapper
      • 3.1 基本用法
      • 3.2 动态条件拼接
      • 3.3 Lambda表达式的高级用法
    • 4. UpdateWrapper
      • 4.1 基本用法
      • 4.2 动态条件拼接
      • 4.3 Lambda表达式的高级用法
    • 5. 拓展功能与未来展望
      • 5.1 动态SQL的使用
      • 5.2 自定义条件构造器
    • 6. 总结

在这里插入图片描述

🎉欢迎来到架构设计专栏~Mybatis-Plus的条件构造器QueryWrapper & UpdateWrapper详解


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

1. 引言

在数据库操作中,条件查询和条件更新是非常常见的需求。为了简化代码,Mybatis-Plus提供了强大的条件构造器——QueryWrapperUpdateWrapper。本文将深入探讨这两个条件构造器的使用方法,并通过示例代码帮助读者更好地理解和应用。

2. Mybatis-Plus简介

Mybatis-Plus 是基于Mybatis的一个增强工具库,旨在简化开发,提高效率。它提供了丰富的功能,包括代码生成器、性能优化、条件构造器等。其中,条件构造器是Mybatis-Plus中的一个核心功能,用于构建灵活的查询和更新条件。

在这里插入图片描述

3. QueryWrapper

3.1 基本用法

QueryWrapper用于构建查询条件,可以通过链式调用的方式组装各种查询条件。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class QueryWrapperExample {public static void main(String[] args) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 等值条件queryWrapper.eq("name", "John");// 不等值条件queryWrapper.ne("age", 25);// 大于条件queryWrapper.gt("create_time", "2022-01-01");// 小于等于条件queryWrapper.le("update_time", "2023-01-01");// 模糊查询queryWrapper.like("email", "@gmail.com");// 排序queryWrapper.orderByAsc("age");// 使用Lambda表达式queryWrapper.lambda().eq(User::getName, "Alice");// 打印SQL语句System.out.println("SQL: " + queryWrapper.getSqlSelect());}
}

上述代码演示了QueryWrapper的基本用法,通过不同的方法添加等值、不等值、范围、模糊等查询条件,同时支持Lambda表达式。

3.2 动态条件拼接

在实际应用中,我们经常需要根据不同条件的存在与否来动态构建查询条件。QueryWrapper提供了一系列的条件拼接方法,例如andornested等。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class DynamicQueryWrapperExample {public static void main(String[] args) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 动态条件拼接queryWrapper.and(wrapper -> wrapper.eq("name", "John").ne("age", 25)).or(wrapper -> wrapper.gt("create_time", "2022-01-01").le("update_time", "2023-01-01"));// 打印SQL语句System.out.println("SQL: " + queryWrapper.getSqlSelect());}
}

在上述代码中,通过andor方法,我们可以根据需要动态拼接查询条件,使得代码更加灵活。

3.3 Lambda表达式的高级用法

QueryWrapper支持Lambda表达式,可以进一步简化代码,提高可读性。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class LambdaQueryWrapperExample {public static void main(String[] args) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// Lambda表达式queryWrapper.lambda().eq(User::getName, "John").ne(User::getAge, 25).like(User::getEmail, "@gmail.com");// 打印SQL语句System.out.println("SQL: " + queryWrapper.getSqlSelect());}
}

通过lambda方法,我们可以使用实体类的属性名而不是字符串,使得代码更加健壮和易维护。

4. UpdateWrapper

UpdateWrapper用于构建更新条件,与QueryWrapper类似,也支持链式调用和Lambda表达式。

4.1 基本用法

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;public class UpdateWrapperExample {public static void main(String[] args){UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// 等值条件updateWrapper.eq("name", "John");// 不等值条件updateWrapper.ne("age", 25);// 大于条件updateWrapper.gt("create_time", "2022-01-01");// 小于等于条件updateWrapper.le("update_time", "2023-01-01");// 模糊查询updateWrapper.like("email", "@gmail.com");// 使用Lambda表达式updateWrapper.lambda().set(User::getName, "Alice").eq(User::getAge, 30);// 打印SQL语句System.out.println("SQL: " + updateWrapper.getSqlSet());}
}

UpdateWrapper的基本用法与QueryWrapper类似,可以通过链式调用添加等值、不等值、范围、模糊等更新条件。

4.2 动态条件拼接

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;public class DynamicUpdateWrapperExample {public static void main(String[] args) {UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// 动态条件拼接updateWrapper.and(wrapper -> wrapper.eq("name", "John").ne("age", 25)).or(wrapper -> wrapper.gt("create_time", "2022-01-01").le("update_time", "2023-01-01"));// 打印SQL语句System.out.println("SQL: " + updateWrapper.getSqlSet());}
}

通过andor方法,我们可以动态拼接更新条件,更好地适应各种业务场景。

4.3 Lambda表达式的高级用法

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;public class LambdaUpdateWrapperExample {public static void main(String[] args) {UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// Lambda表达式updateWrapper.lambda().set(User::getName, "Alice").eq(User::getAge, 30).like(User::getEmail, "@gmail.com");// 打印SQL语句System.out.println("SQL: " + updateWrapper.getSqlSet());}
}

通过lambda方法,我们可以使用实体类的属性名,使得代码更加简洁和可读。

5. 拓展功能与未来展望

5.1 动态SQL的使用

QueryWrapperUpdateWrapper提供了丰富的条件构造方法,但对于一些特定、复杂的业务场景,可能需要使用动态SQL。Mybatis-Plus也支持动态SQL的编写,可以通过@SqlParser注解来实现。

@SqlParser(filter = true)
public interface UserMapper extends BaseMapper<User> {@Select("<script> SELECT * FROM user WHERE 1=1 "+ "<if test=\"name != null\"> AND name = #{name} </if>"+ "<if test=\"age != null\"> AND age = #{age} </if>"+ "</script>")List<User> selectUsers(@Param("name") String name, @Param("age") Integer age);
}

5.2 自定义条件构造器

在某些场景下,可能需要根据具体业务需求自定义条件构造器。Mybatis-Plus提供了AbstractWrapper类,开发者可以继承并实现自己的条件构造器。

import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;public class CustomWrapper<T> extends AbstractWrapper<T, CustomWrapper<T>> {public CustomWrapper() {super();}// 自定义条件构造方法public CustomWrapper<T> customCondition(String condition) {sql.WHERE(condition);return this;}
}

6. 总结

Mybatis-Plus的条件构造器QueryWrapperUpdateWrapper为开发者提供了强大、灵活的条件构建工具,能够大大简化数据库操作的代码。通过本文的介绍,读者可以更加深入地理解这两个条件构造器的使用方法,并在实际项目中灵活应用。在未来,随着Mybatis-Plus的不断更新和完善,我们可以期待更多更强大的功能和特性的加入。希望本文能够帮助开发者更好地利用Mybatis-Plus进行数据库操作,提高开发效率。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DQL命令查询数据(三)

本课目标 掌握MySQL的多表查询 SQL语句的综合应用 多表连接查询 通过各个表之间共同列的关联性&#xff08;例如&#xff1a;外键&#xff09;来查询的 分类&#xff1a; 内连接(INNER JOIN) &#xff0c;可简写为 JOIN&#xff1b;左外连接(LEFT OUTER JOIN)&#xff0c;…

VScode 画图插件

开源免费的插件 随着http://draw.io开源vs code插件之后&#xff0c;它一跃成为最强大的流程图工具。 目前http://draw.io支持3种文件后缀&#xff0c;你只需要新建3种后缀之一的文件就可以在vs code中画流程图&#xff0c;它们分别是&#xff1a; *.drawio*.dio*.drawio.sv…

docker部署simpleDocker

1&#xff0c;安装docker&#xff0c;请参考 linux安装docker 2&#xff0c;安装docker-compose&#xff0c;请参考 Docker-Compose 3&#xff0c;安装simpleDocker 准备docker-compose.yml文件 version: 3 services:redis:container_name: redisimage: redis:latestweb:conta…

7+非肿瘤+WGCNA+机器学习+诊断模型,构思巧妙且操作简单

今天给同学们分享一篇生信文章“Platelets-related signature based diagnostic model in rheumatoid arthritis using WGCNA and machine learning”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解读&#xff1a; DEGs和血小板相关基因的…

Python笔记02-基础概念、数据类型及字符串格式化

文章目录 字面量注释变量数据类型标识符运算符字符串数据输入 字面量 在代码中&#xff0c;被写下来的固定的值&#xff0c;称之为字面量 Python中常用的有6种值&#xff08;数据&#xff09;的类型 如下变量被直接写在程序中&#xff0c;称之为字面量包括 数字和字符串类型 …

STL标准库与泛型编程(侯捷)笔记3

STL标准库与泛型编程&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youbute: 侯捷-STL标准库与泛型编程 B站: 侯捷 - STL Github:STL源码剖析中源码 https://github.com/SilverMaple/STLSourceCo…

uniapp:签字版、绘画板 插件l-signature

官方网站&#xff1a;LimeUi - 多端uniapp组件库 使用步骤&#xff1a; 1、首先从插件市场将代码下载到项目 海报画板 - DCloud 插件市场 2、下载后&#xff0c;在项目中的uni_modules目录&#xff08;uni_modules优点&#xff1a;不需要import引入&#xff0c;还可以快捷更新…

2023全球软件研发技术大会(SDCon2023)-核心PPT资料下载

一、峰会简介 本次峰会包含12大会议主题&#xff1a;云原生设施与平台、微服务架构实践、软件质量与效能、大数据实践与前沿、架构设计与演进、高可用与高性能架构、Web与大前端开发、编程语言与平台、AIGC与大模型、推荐系统实践、AI智能应用与研究、机器学习架构实践。 软件…

二维和三维联合进行圆孔空间定位

0.任务描述 对空间圆孔进行三维空间的定位&#xff0c;方便后续的抓取或装配流程&#xff1a;使用二维图与opencv霍夫圆检测进行二维上的定位&#xff0c;再从深度图上查询深度信息&#xff0c;结合相机内参计算出相机坐标系下圆孔的三维坐标信息&#xff0c;并在点云上进行标…

leetcode算法题之floodfill算法---深搜(dfs)

本章目录 1.图像渲染2.岛屿数量3.岛屿的最大面积4.被围绕的区域5.太平洋大西洋水流问题6.扫雷游戏7.机器人的运动范围 1.图像渲染 图像渲染 class Solution {int dx[4] {0,0,1,-1};int dy[4] {1,-1,0,0};int newColor,prev;int m,n; public:vector<vector<int>&g…

【C++】带你学会使用C++线程库thread、原子库atomic、互斥量库mutex、条件变量库condition_variable

C线程相关知识讲解 前言正式开始C官方为啥要提供线程库thread构造函数代码演示this_threadget_id()yield()sleep_until和sleep_for mutex构造函数lock和unlock上锁全局锁局部锁lambda表达式 try_lock 其他锁时间锁递归版本专用锁recursive_mutex 锁的异常处理lock_guardunique_…

redis可视化工具 RedisInsight

redis可视化工具 RedisInsight 1、RedisInsight是什么2、下载RedisInsight3、使用RedisInsight4、其他redsi可视化工具 1、RedisInsight是什么 RedisInsight 是一个用于管理和监控 Redis 数据库的图形用户界面&#xff08;GUI&#xff09;工具。它是由 Redis Labs 开发的&…