MyBatis-Plus关键功能使用

前言

用了好几年的MyBatis-Plus,有些偏僻的功能不经常用,去用的时候老是忘记,还需要重新查阅官网,借这篇文章的机会,记录一下,帮助他人也方便自己今后查阅。

部分功能

查询某些字段

有些时候查询的数据不需要返回全部字段,只返回业务中感兴趣的字段,所以我们可以用如下API

java 复制代码
User user = baseMapper.selectOne(new LambdaQueryWrapper<User>()
    .eq(User::getId, userId)
    .select(User::getName));//只有name字段有值
String userName = user.getName();

流式查询

MyBatis-Plus 从 3.5.4 版本开始支持流式查询,这是 MyBatis 的原生功能,通过 ResultHandler 接口实现结果集的流式查询。这种查询方式适用于数据跑批或处理大数据的业务场景。

常用方法

  • getResultObject: 获取数据库中的每一条记录。
  • getResultCount: 获取当前处理的结果集条数,每处理一条记录,该计数器会加1,计数从1开始。
  • stop: 停止继续处理结果集,相当于在循环中使用 break 语句。

使用示例

以下是使用流式查询的示例代码,展示了如何结合分页从数据库中拉取数据进行批量处理,以及如何获取表中的所有记录进行处理。

java 复制代码
// 结合分页,按批次从数据库拉取数据出来跑批,例如从数据库获取10万记录,做数据处理
Page<H2User> page = new Page<>(1, 100000);
baseMapper.selectList(page, Wrappers.emptyWrapper(), new ResultHandler<H2User>() {
    int count = 0;
    @Override
    public void handleResult(ResultContext<? extends H2User> resultContext) {
        H2User h2User = resultContext.getResultObject();
        System.out.println("当前处理第" + (++count) + "条记录: " + h2User);
        // 在这里进行你的业务处理,比如分发任务
    }
});

// 从数据库获取表所有记录,做数据处理
baseMapper.selectList(Wrappers.emptyWrapper(), new ResultHandler<H2User>() {
    int count = 0;
    @Override
    public void handleResult(ResultContext<? extends H2User> resultContext) {
        H2User h2User = resultContext.getResultObject();
        System.out.println("当前处理第" + (++count) + "条记录: " + h2User);
        // 在这里进行你的业务处理,比如分发任务
    }
});

在上述示例中,我们创建了一个 Page 对象来指定分页参数,然后调用 selectList 方法并传入 ResultHandler 来处理每一条记录。在 ResultHandler 的 handleResult 方法中,我们可以获取当前处理的记录,并进行相应的业务处理。通过计数器 count,我们可以知道当前处理的是第几条记录。

条件判断

Wrapper 方法通常接受一个 boolean 类型的参数,用于决定是否将该条件加入到最终的 SQL 中。

java 复制代码
queryWrapper.like(StringUtils.isNotBlank(name), Entity::getName, name)
            .eq(age != null && age >= 0, Entity::getAge, age);

如果某个方法没有显式提供 boolean 类型的参数,则默认为 true,即条件总是会被加入到 SQL 中。

相关推荐
陌上丨7 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_56787 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw7 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30737 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道7 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
麦聪聊数据9 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务9 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
程序员侠客行9 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Goat恶霸詹姆斯10 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七10 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习