MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用_Hello-zhou的博客-程序员秘密

技术标签: java  mybatis  MyBatis-Plus  

在这里插入图片描述

假如我们有一张banner_item表,现需要通过banner_id查出所有数据(查询List)

@Data
public class BannerItem {

    private Long id;

    private String name;

    private String img;

    private String keyword;

    private Integer type;

    private Long bannerId;
}


QueryWrapper

最基础的使用方式是这样

// 查询条件构造器

QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.eq("banner_id", id);
// 查询操作
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
// 现在也被封装到ServiceImpl的list方法里面
// List<BannerItem> bannerItems = serviceImpl.list(wrapper);


然后我们可以引入lambda,避免我们在代码中写类似的于banner_id的硬编码

QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
// 现在也被封装到ServiceImpl的list方法里面
// List<BannerItem> bannerItems = serviceImpl.list(wrapper);


LambdaQueryWrapper
为了简化lambda的使用,我们可以改写成LambdaQueryWrapper构造器,语法如下:

LambdaQueryWrapper<BannerItem> wrapper = new QueryWrapper<BannerItem>().lambda();
wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
// 现在也被封装到ServiceImpl的list方法里面
// List<BannerItem> bannerItems = serviceImpl.list(wrapper);


我们可以再次将QueryWrapper<BannerItem>.lambda()简化,变成这个样子

LambdaQueryWrapper<BannerItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
// 现在也被封装到ServiceImpl的list方法里面
// List<BannerItem> bannerItems = serviceImpl.list(wrapper);


链式查询

MyBatis-Plus还提供了一种链式查询的方式,和上面的代码效果一样。
但是这种写法偏向于炫技,可读性没有上面的代码强,大家可以根据需要自行选择方式。

List<BannerItem> bannerItems = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getBannerId, id)
                        .list();


如果只想查询一条记录,例如通过id查询某条记录的详情,使用.one()即可,例如

BannerItem bannerItem = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getId, id)
                        .one();

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zw764987243/article/details/114286053

智能推荐

python 3.7下安装opencv3.4.4_python3.7对应的opencv版本_hshqing的博客-程序员秘密

2018-11-23  1)官网下载Anaconda3, 其中包括的python版本为3.7.0;2)配置opencv时出现一些麻烦,import cv2提示  ImportError:DLL load failed:找不到指定模块!!这是由于Anaconda3中没有自动安装opencv3)opencv官网没有针对python的包,所以在https://www.lfd.uci.edu/...

【Spring学习笔记】浅谈控制反转(IOC)与依赖注入(DI)_Leanfeng_K的博客-程序员秘密

简单介绍IOC与DI:IOC(Inversion Of Control) 控制反转,一种设计思想。DI(Dependency Inject): 依赖注入,IOC思想的一种体现。了解一下 依赖对象:在程序里,业务的实现是依赖类与类的方法。将完成某种特定需求的对象定义为依赖对象。如:在一个电商平台中,卖家可以进行商品上架、下架及发货等操作,程序员将商品的上架的业务功能封装到Sell类里,这个类在整个平台中实例化的对象我们称之为这个电商平台的一个依赖对象。IOC控制反转:何为正转,何为反转?

Python制作炫酷的词云图(包含停用词、词频统计)!!!_词云 停用词 python_GIS Lin的博客-程序员秘密

Python制作词云图(包含词频统计)词云效果合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入词云效果你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章

知识管理的建设思考_wx36936的博客-程序员秘密

<br />企业的知识管理,一直是一个令人头痛的问题。业界的KM 理论都说明了一个道理, KM 不好做。 <br />广联达公司决心上KM ,也是看到软件企业,最大的价值之一,就是知识。而最需要复用的也是知识。公司发展越是迅速,其知识的复用程度就越是紧迫。 <br />流程是一种典型的知识复用的方法。但流程并不能包括所有知识。既然这样,首先就要明确一下,什么是知识? <br />百科辞典里是这样描述的: <br />把识别万物实体与性质的是与不是,定义为知识。知识 是 经验的固化 。 人类的认识成果 , 来

dos转unix_写回的博客-程序员秘密

故障环境:Dockerfile编写环境是Win10+Nodepad++,Docker服务器为Centos7不知道有没有朋友会像我这么懒为了方便测试就用winscp远程打开docker服务器,直接创建dockerfile并进行调试的呢。如果有的话我想一定遇到过这个问题:运行后容器没有驻留,而是异常中止了,使用dokcer logs查看日志却报standard_init_linux.go:1...

实参与形参_vb中形参与实参的区别_赛男丨木子丿小喵的博客-程序员秘密

形参:是声明函数时写的,如果是多个形参,那么需要用,隔开。形参的值不是固定的,形参要与实参实际传入的数据一一相对应。实参:在调用时,实际传入函数中的值,传入后,在函数中使用形参中获取具体的值。形参顾名思意是形式上的参数 没有具体值你在写一个方法的时候当然不知道具体值而实参就是你调用方法时给的参数 给的是和所调用方法所匹配的具体值实参是函数调用时调用函数传送给被调用函数参数的实际值。实参可以是常量、变量和表达式,实参必须有确定的值。 形参是函数定义时,参数表中的参数。形式参数只能是变量。

随便推点

Vuforia SDK----从Unity的SD卡装入一个DataSet_liang_704959721的博客-程序员秘密

Vuforia SDK可以让你从不同的位置加载数据集。 如果您的设备有一个SD卡,您可以将您的设备的数据集(.XML和.DAT文件),在外部存储(SD卡)。 然后,你可以告诉Vuforia从SD卡中加载数据集。下面的代码片段展示了如何这种方法可以在C#脚本来实现。 在下面的例子中,假设该数据集被称为停机坪。还假设的相关文件(Tarmac.xml和Tarmac.dat)已经被复制到SD卡路径的/

js作用域及作用域链_js作用域链_是小糖豆芽的博客-程序员秘密

一、作用域定义作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是私有作用域,它们都是栈内存。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。全局执行环境是最外围的一个执行环境。根据 ECMAScript 实现所在的宿主环境不同,表示的执行环境的对象也不一样。在 Web 浏览器中,全局执行环境被认为是

从程序员到项目经理(三):认识项目经理_享耳三羊的博客-程序员秘密

转自博客园http://www.cnblogs.com/watsonyin/archive/2012/09/25/2701483.html西西吹雪在希腊德尔斐的阿波罗神庙上,刻得着一句神秘的箴言:“认识你自己”。从某种程度上来说,我们都是自己的“最熟悉的陌生人”。认识自己的位置,是每个人获得成长的第一堂课。一个人的位置,对其言行的影响是至关重要的,俗话说:“屁股决定脑袋”,虽然听着粗俗,却饱含

redis 清空缓存命令_linux删除redis缓存_kenhins的博客-程序员秘密

redis 清空缓存打开redis客户端运行命令flushall ——> 清空整个 Redis 服务器的数据(删除所有数据库的所有 key )flushdb ——> 清空当前数据库中的所有 key

VUE实战技巧_AlterIt的博客-程序员秘密

又到了周五,这两周有点小忙,5.10 母亲节那天,我没有放假,出来打拼嘛,挺辛苦的,刚好月中版本上线,我做的蛮重要的模块,5.12 就封板了,所以得 5.10 号加了个班,还好可以调休,不然连上半个月还不能休息是有点心累的。公司还行是双休,项目组也不错,一般不加班,所以就乘着周五有点自己的时间看看前端的东西,因此有了这篇博文。基础环境搭建官方提示:如果你在 Windows 上通过 minTTY 使用 Git Bash,交互提示符并不工作,必须通过 winpty vue.cmd create hel.

互联网产品设计进阶笔记(6)理解交互设计_实例分析谈谈你对交互行为和交互形式设计的理解_小北哥哥和北妈的博客-程序员秘密

在使用网站,软件,消费产品,各种服务的时候(实际上是在同它们交互),使用过程中的感觉就是一种交互体验。随着网络和新技术的发展,各种新产品和交互方式越来越多,人们也越来越重视对交互的体验。交互设计 (Interaction Design) 作为一门关注交互体验的新学科在二十世纪八十年代产生了,它由IDEO的一位创始人比尔.莫格里奇在1984年一次设计会议上提出,他一开始给它命名为“软面(Soft F