当前位置: 首页 > news >正文

ResultMap

resultMap 是 MyBatis 中用于映射数据库查询结果到 Java 对象的核心配置工具。它允许开发者灵活地定义数据库字段与 Java 对象属性之间的对应关系,尤其适用于字段名与属性名不一致、处理复杂对象关系(如嵌套对象或集合)等场景。

1. 基础用法

当数据库字段名与Java对象属性名不一致时,可以通过ResultMap显式映射。

示例:

<resultMap id="userResultMap" type="User">
    <!-- 主键字段用 id 标签 -->
    <id property="id" column="user_id"/>
    <!-- 普通字段用 result 标签 -->
    <result property="username" column="user_name"/>
    <result property="email" column="user_email"/>
</resultMap>

<select id="selectUser" resultMap="userResultMap">
    SELECT user_id, user_name, user_email FROM users
</select>
  • id:唯一标识该resultMap
  • type:目标Java对象类型(如User类)
  • property:Java对象的属性名
  • column:数据库查询结果的列名

2. 处理关联关系

2.1 一对一(<assosiation>

映射一个对象中的另一个属性(如User包含address)

<resultMap id="userWithAddressMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <!-- 嵌套映射 Address 对象 -->
    <association property="address" javaType="Address">
        <result property="street" column="address_street"/>
        <result property="city" column="address_city"/>
    </association>
</resultMap>

2.2 一对多(<collection>

映射一个对象中的集合属性(如User包含多个Order)

<resultMap id="userWithOrdersMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <!-- 嵌套映射 Order 集合 -->
    <collection property="orders" ofType="Order">
        <id property="orderId" column="order_id"/>
        <result property="amount" column="order_amount"/>
    </collection>
</resultMap>
  • ofType:集合中元素的类型(如Order类)

2.3 自动映射(autoMapping)

如果属性名与字段名大部分一致,可以启用自动映射,减少冗余配置

<resultMap id="userResultMap" type="User" autoMapping="true">
    <!-- 仅需显式配置不一致的字段 -->
    <result property="username" column="user_name"/>
</resultMap>
  • autoMapping="true":自动映射同名字段
  • 显式配置覆盖:如果某字段需要特殊处理,仍可手动定义

2.4继承重用(extends)

通过继承已有的resultMap,避免重复配置

<resultMap id="baseUserMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
</resultMap>

<!-- 继承 baseUserMap,并添加新字段 -->
<resultMap id="detailedUserMap" extends="baseUserMap" type="User">
    <result property="email" column="user_email"/>
</resultMap>

3. 使用场景

  • 字段名与属性名不一致:例如数据库用下划线命名,Java 用驼峰命名。
  • 复杂对象映射:处理嵌套对象、集合、继承等关系。
  • 性能优化:通过懒加载减少不必要的查询。
  • 自定义类型转换:如日期格式、加密字段等。

相关文章:

  • Codeforces Round 305 (Div. 1) C. Mike and Foam 容斥原理、质因数分解
  • tee命令
  • 09 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(三)
  • Linux rootfs:如何开机就自动添加某个用户?
  • 【C++】异常
  • 基于Canvas和和原生JS实现俄罗斯方块小游戏
  • torch.cat 函数介绍
  • 自然语言处理:Transformer、BERT
  • 数据结构(顺序表)
  • 基于PaddleNLP使用DeepSeek-R1搭建智能体
  • SpringBoot与Sentinel整合,解决DDoS攻击与异常爬虫请求问题
  • 系统思考与问题诊断
  • 【求100-200之间的素数】
  • 支持向量简要理解
  • AF3 squeeze_features函数解读
  • 高效运行 QwQ-32B + 错误修复
  • Ubuntu 下 Docker 企业级运维指南:核心命令与最佳实践深度解析20250309
  • AI Copilot——维新派的贾维斯,守旧派的墓志铭(程序员视角)
  • Synchronized 锁升级过程
  • 推荐一些免费开源支持Vue3甘特图组件
  • 上海黄浦:新婚夫妻来登记可“摇号”定制无人机表演,每周三对
  • 竞彩湃|水晶宫夺冠后乘胜追击,四大皆空曼城人间清醒?
  • 香港油麻地旧警署将向游客开放
  • 在越剧之乡嵊州,浙江音乐学院越剧学院成立
  • 国新办10时将举行新闻发布会,介绍4月份国民经济运行情况
  • 十大券商看后市|A股指数有望进一步缓步推高,淡化短期波动