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

使用MyBatis实现含集合字段的Java Record及ResultMap配置咨询

MyBatis对含集合字段的Java Record的支持及ResultMap定义

MyBatis从3.5.9版本开始正式支持Java Record,包括包含集合类型字段的Record,只要你的Record符合Java语言规范(不可变、隐式全参构造器等),就能正常使用MyBatis进行CRUD操作。

一、定义包含集合字段的Java Record示例

先创建两个关联的Record,比如订单和订单项:

// 主Record:包含集合字段items
public record OrderRecord(
    Long id,
    String orderNo,
    LocalDateTime createTime,
    List<OrderItemRecord> items
) {}

// 嵌套的子Record
public record OrderItemRecord(
    Long id,
    Long orderId,
    String productName,
    Integer quantity
) {}

二、对应的ResultMap定义

在Mapper XML中,使用<collection>标签来映射集合类型字段,具体配置如下:

<!-- 主ResultMap:映射OrderRecord -->
<resultMap id="OrderRecordResultMap" type="com.example.OrderRecord">
    <!-- 主键映射 -->
    <id column="order_id" property="id"/>
    <!-- 普通字段映射 -->
    <result column="order_no" property="orderNo"/>
    <result column="create_time" property="createTime"/>
    
    <!-- 集合字段映射:使用collection标签 -->
    <collection property="items" ofType="com.example.OrderItemRecord">
        <id column="item_id" property="id"/>
        <result column="order_id" property="orderId"/>
        <result column="product_name" property="productName"/>
        <result column="quantity" property="quantity"/>
    </collection>
</resultMap>

三、关联查询SQL示例

配合上述ResultMap,编写关联查询订单与订单项的SQL:

<select id="getOrderById" resultMap="OrderRecordResultMap">
    SELECT 
        o.id AS order_id,
        o.order_no,
        o.create_time,
        oi.id AS item_id,
        oi.order_id,
        oi.product_name,
        oi.quantity
    FROM orders o
    LEFT JOIN order_items oi ON o.id = oi.order_id
    WHERE o.id = #{id}
</select>

关键注意事项

  • 版本要求:必须使用MyBatis 3.5.9及以上版本,否则不支持Java Record。
  • 字段映射:如果数据库列名与Record的组件名(字段名)一致,可省略column属性;不一致时必须显式指定映射关系。
  • 实例化逻辑:MyBatis会自动使用Java Record的隐式全参构造器来创建实例,无需额外配置构造器或Setter方法。
  • 嵌套类型:<collection>的ofType属性必须指定集合元素的具体Record类型,MyBatis会自动处理嵌套实例化。

内容的提问来源于stack exchange,提问作者Mark Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:20:03