MyBatisPlus——Wrapper

Wrapper体系

在这里插入图片描述

QueryWrapper

使用字符串表示列名,通过字符串拼接的方式构建查询条件
再将 wrapper 作为条件参数,写入BaseMapper提供的查找方法中(或其他数据库方法)

        QueryWrapper<QueryEntity> wrapper = new QueryWrapper<>();
        wrapper.select("user.username","user.userId");
        //wrapper.like("user.username","张三");
        wrapper.eq("user.username","张三");
        List<ResultEntity> list = QueryMapperDao.selectList(wrapper);
  • 优点:更灵活,支持复杂查询操作和 SQL 片段拼接。
  • 缺点:类型不安全、可读性较差。
LambdaQueryWrapper

逻辑上与QueryWrapper相同,只是使用Lambda表达式表示列名,通过Lambda表达式的方式构建查询条件

        LambdaQueryWrapper<QueryEntity> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.select(QueryEntity::getUserId , QueryEntity::getUsername);
        queryWrapper.like(QueryEntity::getUsername,params.get("name"));
        //queryWrapper.eq(QueryEntity::getUsername,params.get("name"));
        List<ResultEntity> list = QueryMapperDao.selectList(queryWrapper);
  • 优点:类型安全、易读性高,可以直接使用实体类的属性和方法。
  • 缺点:在某些复杂查询操作下可能不支持。
wrapper常用方法

在这里插入图片描述

注意点1
  • 在写 select() 方法时注意
    如果要查询多个字段 ,要将字段放在同一个括号中,以逗号分隔
        //分开书写时,select会被覆盖,最后传递的只有getUsername一个条件
        //queryWrapper.select(SysUserEntity::getUserId);
        //queryWrapper.select(SysUserEntity::getUsername);
        queryWrapper.select(SysUserEntity::getUserId , SysUserEntity::getUsername);
注意点2——${ew.customSqlSegment}

${ew.customSqlSegment}条件占位符 , 其中就有内置 where 关键字

在自定义SQL语句时 ${ew.customSqlSegment}where 不可共存

注意3 : 自定义SQL语句——联合查询

以下提供三种方式

  • Mapper文件中定义SQl语句——join on+ 条件占位符
        //Service层
        QueryWrapper<SysGoodsEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("u.username","qqq");
        List<SysGoodsEntity> list = sysGoodsDao.userAndGoods(wrapper);
         
        //Dao层
        List<SysGoodsEntity> userAndGoods(@Param("ew") QueryWrapper<SysGoodsEntity> queryWrapper);
    // Mapper文件中
        SELECT g.*
        FROM sys_goods as g
        left join  sys_user as u
        on g.buyers = u.username
         ${ew.customSqlSegment}
  • Mapper文件中定义SQl语句—— 参数占位符
        //Service层
        List<SysGoodsEntity> list = sysGoodsDao.userAndGoods("qqq");
         
        //Dao层
        List<SysGoodsEntity> userAndGoods(String name);
    // Mapper文件中
    SELECT g.*
    FROM sys_goods as g , sys_user as u
    WHERE g.buyers = u.username
    AND u.username= #{name}
  • @select 注解 ——join on
        //Service层
        QueryWrapper<SysGoodsEntity> wrapper = new QueryWrapper<>();
        wrapper.like("u.username","man");
        List<SysGoodsEntity> list = sysGoodsDao.userAndGoodsSelect(wrapper);
         
        //Dao层
        @Select("SELECT g.* FROM sys_goods as g left join sys_user as u  on g.buyers = u.username ${ew.customSqlSegment}")
        List<SysGoodsEntity> userAndGoodsSelect(@Param("ew") Wrapper<SysGoodsEntity> queryWrapper);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python笔记|字符串合并、切片、索引

一、合并 字符串可以用 合并&#xff08;粘到一起&#xff09;&#xff0c;也可以用 * 重复&#xff1a; >>> 3 * un ium unununium 相邻的两个或多个字符串字面值&#xff08;引号标注的字符&#xff09;会自动合并&#xff1a; >>> Py thon Python …

【鸿蒙HarmonyOS开发笔记】自定义组件详解

自定义组件 除去系统预置的组件外&#xff0c;ArkTS 还支持自定义组件。使用自定义组件&#xff0c;可使代码的结构更加清晰&#xff0c;并且能提高代码的复用性。 我们开发的每个页面其实都可以视为自定义组件内置组件的结合 语法说明 自定义组件的语法如下图所示 各部分…

STM32的简单介绍

STM32是一种基于ARM Cortex-M内核的32位微控制器&#xff0c;由意法半导体公司开发和生产。STM32具有丰富的外设和功能&#xff0c;适用于各种应用场合&#xff0c;如工业控制、消费电子、物联网、人机交互等。STM32的优势包括低功耗、高性能、高可靠性、易于开发等。STM32的系…

R语言深度学习-6-模型优化与调试

本教程参考《RDeepLearningEssential》 这是本专栏的最后一篇文章&#xff0c;一路走来&#xff0c;大家应该都可以独立的建立一个自己的神经网络进行特征学习和预测了吧&#xff01; 6.1 缺失值处理 在我们使用大量数据进行建模的时候&#xff0c;缺失值对模型表现的影响非常…

windows安装go

一、go安装包下载 Go官网下载地址&#xff1a;https://golang.org/dl/ Go官方镜像站&#xff08;推荐&#xff09;&#xff1a;https://golang.google.cn/dl/ 选择windows 二、双击安装并配置环境变量 windows7、10或11配置环境变量-CSDN博客 三、测试是否安装成功 打开c…

git问题列表(一)(持续更新中~~~)

文章目录 问题1&#xff1a;如何在本地创建git仓库&#xff0c;并推送到远程仓库&#xff1f;问题2&#xff1a;如何创建本地分支&#xff0c;并基于其创建远程分支&#xff1f;问题3&#xff1a;报错“origin does not appear to be a git repository”是什么原因&#xff1f;…

Unity触发器的使用

1.首先建立两个静态精灵&#xff08;并给其中一个物体添加"jj"标签&#xff09; 2.添加触发器 3.给其中一个物体添加刚体组件&#xff08;如果这里是静态的碰撞的时候将不会触发效果&#xff0c;如果另一个物体有刚体可以将它移除&#xff0c;或者将它的刚体属性设置…

The Rise and Potential of Large Language Model Based Agents: A Survey

OpenAI AI的应用研究主管Lilian Weng发布了关于AI Agents的《大语言模型&#xff08;LLM&#xff09;支持的自主代理》&#xff0c;在文章中她定义了基于LLM构建AI Agents的应用框架&#xff1a;AgentLLM&#xff08;大型语言模型&#xff09;记忆&#xff08;Memory&#xff0…

Tomcat Seeion 集群

部署&#xff1a;nginx服务器&#xff1a;11-11&#xff1b;tomcat1:11-3; tomcat2:11-6 nginx服务器11-11做搭建&#xff1a; [rootmcb-11 ~]# systemctl stop firewalld [rootmcb-11 ~]# setenforce 0 [rootmcb-11 ~]# yum install epel-release.noarch -y [rootmcb…

【Linux】对进程PCB的理解查看进程信息的方法

一、学习准备&#xff1a;对操作系统工作模式的理解 首先我们要清楚的是&#xff0c;操作系统是一个进行软硬件资源管理的软件。操作系统对下要管理好底层硬件。每一个硬件的生产产商都会给他们的产品提供对应的驱动程序&#xff0c;驱动程序是特定于某一硬件或系统设备的软件组…

Oracle P6 Professional 配置连接数据库总结

前言 P6 Professional作为Oracle P6计划管理系统的重要套件之一&#xff0c;其操作出色&#xff0c;体检佳&#xff0c;是非常多的计划工程师跟踪项目进度计划的辅助工具。自20年前&#xff0c;Professional一直在不断的演变更新&#xff0c;以适应当前的新技术&#xff0c;从…

Coursera上Golang专项课程2:Functions, Methods, and Interfaces in Go 学习笔记

Functions, Methods, and Interfaces in Go Course Certificate 本文是学习 Functions, Methods, and Interfaces in Go 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Functions, Methods, and Interfaces in GoMODULE 1: FUNCTIONS AND ORGANIZ…

Selenium-webdriver_manager判断是否已经下载过驱动(复用缓存驱动)

1,谷歌浏览器默认位置 2&#xff0c;ChromeDriverManager 下载的驱动位置 其中admin为机器的用户名 def installDriver(self):"""判断是否需要下载driver""""""找到本机谷歌浏览器版本""""""C:\P…

mysql驱动的下载和JDBC的使用(在idea上)

1.mysql驱动的下载 在这里我们需要进入中央仓库中去下载mysql驱动的下载。 https://mvnrepository.com/ 上面就是中央仓库的网址。 如图&#xff1a; 上面就是中央仓库的网址首页。 1.在上面搜索框内输入mysql 如图&#xff1a; 这里呢&#xff0c;上面的mysql 是8.0以上版…

Spring6--IOC反转控制 / 基于XML管理bean

1. 容器IOC 先理解概念&#xff0c;再进行实际操作。概念比较偏术语化&#xff0c;第一次看可能看不懂&#xff0c;建议多看几遍&#xff0c;再尝试自己独立复述一遍&#xff0c;效果会好些 1.1. IOC容器 1.1.1. 控制反转&#xff08;IOC&#xff09; IOC (Inversion of Con…

多标签分类新建模方法

常见的多标签分类方法是同时生成多个标签的logits&#xff0c;然后接一个sigmoid激活函数做二分类。该方法简单直接&#xff0c;但忽略了标签之间的相关性。虽然业界针对该问题提出了很多解决思路&#xff0c;但大多是任务特定&#xff0c;通用性不强&#xff0c;也不够优雅。 …

利用生成式人工智能进行功能管理测试

就 DevOps 而言&#xff0c;生成式 AI与功能管理测试的新兴集成标志着一次重大演变。我们将认真研究这项技术如何彻底改变我们创建测试环境的方式。 使用人工智能生成测试使我们能够模拟大量的用户场景和环境&#xff0c;这意味着我们可以开发和部署不仅好而且很棒的功能&…

pyspark基础 -- DataFrame的理解与案例

DataFrame(df)介绍 datafram就是一个内存中的二维表结构&#xff0c;具备表结构的三个基本属性&#xff1a; 行列表结构描述 在结构层面&#xff0c;pyspark中的StructType对象描述了表结构&#xff0c;StructField对象描述了表的一个列信息&#xff1b;在数据层面&#xff…

Epuck2 在 ROS 下的运动控制

文章目录 前言一、初始配置二、运动控制三、移动机器人总结 前言 在对Epuck2机器人进行完固件更新及IP地址查询后&#xff0c;接下来通过ROS来对Epuck2机器人进行运动控制。 一、初始配置 &#xff08;1&#xff09;创建一个 catkin 工作空间 mkdir -p ~/catkin_ws/src cd ~…

2023年蓝桥杯模拟省赛——列名

目录 题目链接&#xff1a;2.列名 - 蓝桥云课 (lanqiao.cn) 思路 高级思路&#xff1a;进制转换 难点一 难点二 难点三 总结 题目链接&#xff1a;2.列名 - 蓝桥云课 (lanqiao.cn) 思路 先来看我的暴力的思路吧 主要有以下步骤&#xff1a; 初始化一个长度为3的数组res用…