温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java怎么批量查数据

发布时间:2026-09-01 09:06:16 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

在 Java 里“批量查数据”通常分几种场景,下面按常见用法给你总结,直接对照用就行。


一、MyBatis 批量查询(最常用)

1️⃣ 根据 ID 列表批量查

Mapper 接口

List<User> selectByIds(@Param("ids") List<Long> ids);

XML

<select id="selectByIds" resultType="User">
    SELECT * FROM user
    WHERE id IN
    <foreach collection="ids" item="id" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

✅ 适合:ID 批量查


2️⃣ 多条件批量查(List 参数)

List<User> selectByConditions(@Param("list") List<UserQuery> list);
<select id="selectByConditions" resultType="User">
    SELECT * FROM user
    WHERE
    <foreach collection="list" item="item" separator=" OR ">
        (name = #{item.name} AND age = #{item.age})
    </foreach>
</select>

二、JDBC 批量查询(原生)

JDBC 没有真正的批量 SELECT,一般是:

方式 1:IN 查询

String sql = "SELECT * FROM user WHERE id IN (?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);

方式 2:分页 / 游标查大量数据

PreparedStatement ps = conn.prepareStatement(
    "SELECT * FROM user",
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY
);
ps.setFetchSize(1000);
ResultSet rs = ps.executeQuery();

✅ 适合:百万级数据


三、JPA / Spring Data 批量查

List<User> findByIdIn(List<Long> ids);

或:

@Query("SELECT u FROM User u WHERE u.status IN :statuses")
List<User> findByStatuses(@Param("statuses") List<Integer> statuses);

四、批量查 + 分批处理(防止 OOM)

List<Long> ids = ...; // 10000 个
int batchSize = 500;

for (int i = 0; i < ids.size(); i += batchSize) {
    List<Long> sub = ids.subList(i, Math.min(i + batchSize, ids.size()));
    List<User> users = userMapper.selectByIds(sub);
    // 处理
}

强烈推荐:避免 SQL 过长或内存爆炸


五、多线程并行批量查(提升性能)

ids.parallelStream()
   .collect(Collectors.groupingBy(i -> i % 4))
   .values()
   .parallelStream()
   .forEach(sub -> userMapper.selectByIds(sub));

⚠️ 注意数据库连接池大小


六、什么时候不算“批量查”

❌ 在 for 循环里一条条查(N+1 问题)
❌ 一次查全表不分页


如果你能告诉我:

  • 用的什么框架(MyBatis / JPA / JDBC)
  • 数据量(几百 / 几万 / 上百万)
  • 查询条件(ID / 多条件)

我可以直接给你最合适的代码方案

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI