Mybatis-plus listObjs()

1. ​​listObjs() 的作用​​

listObjs() 是 MyBatis-Plus 提供的一个特殊查询方法,用于:

  • ​​只查询单列数据​ ​(比如只查 user_id 这一列)

  • ​​自动将结果转换为指定类型​ ​(如 Long、String 等)

  • ​​queryWrapper​ ​:已经设置了 select(Follow::getUserId),表示只查 user_id 列

  • ​​obj -> (Long) obj​ ​:将查询到的 user_id 值强制转换为 Long 类型

我来详细解释 listObjs() 的用法,并用最简单的方式教你如何使用它。


1. ​​listObjs() 的作用​​

listObjs() 是 MyBatis-Plus 提供的一个特殊查询方法,用于:

  • ​只查询单列数据​ (比如只查 user_id 这一列)
  • ​自动将结果转换为指定类型​ (如 Long、String 等)

2. ​​你的代码解析​​

kotlin 复制代码
List<Long> followerIds = followService.listObjs(
    queryWrapper,      // 查询条件
    obj -> (Long) obj  // 结果转换函数(将Object转为Long)
);
  • ​queryWrapper​ :已经设置了 select(Follow::getUserId),表示只查 user_id 列
  • ​obj -> (Long) obj​ :将查询到的 user_id 值强制转换为 Long 类型

3. ​​分步拆解(完全等价写法)​​

如果你觉得 Lambda 表达式难以理解,可以拆解成这样:

ini 复制代码
java
复制
// 1. 执行查询,获取Object类型的结果列表
List<Object> rawResults = followService.listObjs(queryWrapper);

// 2. 手动转换为Long类型
List<Long> followerIds = new ArrayList<>();
for (Object obj : rawResults) {
    followerIds.add((Long) obj);
}

4. ​​实际场景示例​​

假设有一个 follow 表,结构如下:

id user_id follow_user_id
1 100 200
2 101 200

你想查询 follow_user_id = 200 的所有粉丝的 user_id:

(1) 完整代码
ini 复制代码
java
复制
// 构建查询条件
LambdaQueryWrapper<Follow> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Follow::getFollowUserId, 200)  // WHERE follow_user_id = 200
           .select(Follow::getUserId);        // 只查 user_id 列

// 执行查询
List<Long> followerIds = followService.listObjs(queryWrapper, obj -> (Long) obj);

// 结果:followerIds = [100, 101]
(2) 如果不用 Lambda
ini 复制代码
java
复制
QueryWrapper<Follow> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("follow_user_id", 200)
           .select("user_id");  // 直接写列名

List<Long> followerIds = followService.listObjs(queryWrapper, obj -> (Long) obj);

5. ​​常见问题解答​​

Q1: 为什么不能直接用 list()?
  • list() 会返回 ​完整实体对象列表​ (所有字段),但你只需要 user_id 这一列,用 listObjs() 更高效。
Q2: 如果查询多列怎么办?
  • listObjs() 只能查单列,多列查询请用 listMaps():

    javascript 复制代码
    queryWrapper.select("user_id", "create_time");
    List<Map<String, Object>> result = followService.listMaps(queryWrapper);

    最推荐写法

    perl 复制代码
    List<Long> followerIds = followService.listObjs(
        Wrapper.<Follow>query()
            .eq("follow_user_id",200)
            .select("user_id"),
        obj -> (Long) obj
    );
相关推荐
禾小西15 小时前
Redis AOF 日志:宕机了,如何避免数据丢失?
java·redis·mybatis
天空鸟_时光不老20 小时前
09-RAG问答系统落地:从默认分割器的坑到Milvus召回调优
java·人工智能·spring boot·spring·spring cloud·maven·mybatis
西凉的悲伤21 小时前
MyBatis 中 association 与 collection 详解
java·mybatis
天空鸟_时光不老1 天前
10-Agent安全隐患与SQL执行层加固
java·数据库·人工智能·sql·spring·maven·mybatis
jianjinwssy2 天前
MyBatis-Plus 从入门到实战:常用功能与核心原理
java·mybatis
ss2732 天前
AI全栈实战 | 3.6-01 数据库与 ORM:学过 MyBatis 再看 SQLAlchemy,才知道“半自动“和“全自动“差在哪
数据库·mybatis
代码什么用6 天前
使用javassist生成类 && MyBatis中接口代理机制及使用
mybatis
paopaokaka_luck6 天前
非遗文物数字化小程序(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
javascript·spring boot·mysql·数据分析·echarts·mybatis
韩曙亮6 天前
【JavaEE】MyBatis 基本用法 ⑤ ( 单条件查询 | 多条件查询 | 多条件动态查询 | 单条件动态查询 )
java·sql·java-ee·mybatis·mapper·sql映射
x-Achan6 天前
Redis实现方案:更新策略、穿透、雪崩、击穿、工具封装
java·spring boot·redis·spring·bootstrap·mybatis