You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MyBatis中使用复合键批量查询多条记录?

MyBatis批量查询复合主键记录的实现方案

这个需求完全可行,MyBatis可以通过动态SQL轻松实现你想要的多组复合主键批量查询效果,具体实现步骤如下:

1. 定义Mapper接口方法

在你的Mapper接口中新增批量查询方法,接收一组Foo对象列表作为参数:

// 若需要指定参数名,可添加@Param("fooList")注解
List<Foo> getFooListBatch(List<Foo> fooList);

2. 编写MyBatis XML动态SQL

在对应的Mapper XML文件中,新增一个<select>标签,使用<foreach>标签循环生成复合主键的OR条件分组:

<select id="getFooListBatch" resultMap="foo">
  SELECT f.foo_id_1, f.foo_id_2, f.foo_name
  FROM foo f
  WHERE
  <foreach collection="list" item="foo" separator="OR">
    (f.foo_id_1 = #{foo.fooId1} AND f.foo_id_2 = #{foo.fooId2})
  </foreach>
</select>
  • collection:对应接口方法的参数集合名,若参数未加@Param注解,默认用list;如果加了@Param("fooList"),则改为fooList
  • item:循环中单个Foo对象的别名,对应SQL中#{foo.fooId1}里的前缀
  • separator:每组条件之间的分隔符,这里用OR拼接

3. 判断记录是否存在

调用该批量查询方法后,返回的List<Foo>就是数据库中实际存在的记录。你可以通过对比原输入的Foo列表和返回列表,找出那些不在返回结果中的对象,即为数据库中不存在的记录。

注意事项

  • 如果批量查询的对象数量过大(如超过500条),需要注意数据库的SQL语句长度限制,这种情况下建议分批次查询,避免触发数据库的SQL长度阈值
  • 复合主键的查询方式能有效利用主键索引,性能优于其他拼接方式,无需担心索引失效问题

内容的提问来源于stack exchange,提问作者Anmol Garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:06:45