User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   SQL   ›   MyBatis   ›   正文
MyBatis

MybatisPlus—QueryWrapper、QueryChainWrapper、LambdaQueryWrapper以及LambdaQueryChainWrapper

2020-07-24 16:38:49
973  0 1
参考目录 隐藏
1) QueryWrapper
2) LambdaQueryWrapper
3) QueryChainWrapper
4) LambdaQueryChainWrapper
5) 总结:

阅读完需:约 2 分钟

前言:以前都是使用QueryWrapper的情况多一点,其余三种也没怎么涉及。

首先准备一个对应的实体类:

@Data
@TableName("house")
public class HouseEntity {
    @TableId(type = IdType.AUTO)
    private Integer houseId;
    private String houseOwner;
    private String houseArea;
}

分别测试使用代码测试,都以查询所有的数据为目的。都注入

@Autowired
private HouseMapper houseMapper;

QueryWrapper

@Test
public void test1() {
List<HouseEntity> list=houseMapper.selectList(new QueryWrapper<HouseEntity>()
                .orderByDesc("house_area"));
        System.out.println("QueryWrapper:"+list);
    }

执行结果:QueryWrapper:[HouseEntity(houseId=2, houseOwner=LS, houseArea=72), HouseEntity(houseId=1, houseOwner=ZS, houseArea=70)]

最基础的使用方式是这样

// 查询条件构造器
QueryWrapper<HouseEntity> wrapper = new QueryWrapper<>();
wrapper.eq("houseOwner",house);
// 查询操作
List<HouseEntity> house = houseMapper.selectList(wrapper);

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

QueryWrapper<HouseEntity> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(HouseEntity::houseOwner, house);
List<HouseEntity> house = houseMapper.selectList(wrapper);

LambdaQueryWrapper

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

@Test
public void test3() {
List<HouseEntity> list=houseMapper.selectList(new LambdaQueryWrapper<HouseEntity>()
                .orderByDesc(HouseEntity::getHouseArea));
       System.out.println("LambdaQueryWrapper:"+list);
    }

执行结果:LambdaQueryWrapper:[HouseEntity(houseId=2, houseOwner=LS, houseArea=72), HouseEntity(houseId=1, houseOwner=ZS, houseArea=70)]

或者

LambdaQueryWrapper<HouseEntity> wrapper = new QueryWrapper<HouseEntity>().lambda();
wrapper.eq(HouseEntity:: getHouseArea,house);
List<HouseEntity> house = houseMapper.selectList(wrapper);

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

LambdaQueryWrapper<HouseEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BannerItem::getBannerId, id);
List<HouseEntity> house = houseMapper.selectList(wrapper);

QueryChainWrapper

MyBatis-Plus还提供了一种链式查询的方式,和上面的代码效果一样。 但是这种写法偏向于炫技,可读性没有上面的代码强。

@Test
public void test() {
List<HouseEntity> list2=new QueryChainWrapper<>(houseMapper)
                .orderByDesc("house_area").list();
        System.out.println("QueryChainWrapper:"+list);
    }

执行结果:QueryChainWrapper:[HouseEntity(houseId=2, houseOwner=LS, houseArea=72), HouseEntity(houseId=1, houseOwner=ZS, houseArea=70)]

LambdaQueryChainWrapper

@Test
public void test3() {
List<HouseEntity> list = new LambdaQueryChainWrapper<>(houseMapper)
                .orderByDesc(HouseEntity::getHouseArea).list();
        System.out.println("LambdaQueryChainWrapper:"+list);
  }
执行结果:LambdaQueryChainWrapper:[HouseEntity(houseId=2, houseOwner=LS, houseArea=72), HouseEntity(houseId=1, houseOwner=ZS, houseArea=70)]

总结:

  1. QueryWrapper、QueryChainWrapper只能都只能指定需要的数据库列名
  2. LambdaQueryWrapper、LambdaQueryChainWrapper可以通过获取Lambda数据库列名
  3. QueryWrapper 、LambdaQueryWrapper不能使用链式查询的方式,必须借助BaseMapper来执行
  4. QueryChainWrapper、LambdaQueryChainWrapper可以使用链式查询的方式,如list(),one()

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

1 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 294点赞 593974浏览

随机文章
Redis—注解接口限流
2年前
SpringBoot—logback日志配置
5年前
Kotlin-内置类型—集合框架(五)
4年前
SpringBoot—Ajax实现文件上传
5年前
SpringCloud—OpenFeign(二)参数传递
5年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1927 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 593974 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付