Mybatis中resultMap的Colum和property怎么用

发布时间:2022-01-10 14:15:51 作者:iii
来源:亿速云 阅读:256
# Mybatis中resultMap的Colum和property怎么用

## 一、resultMap基础概念

### 1.1 什么是resultMap
resultMap是MyBatis框架中用于映射数据库查询结果到Java对象的核心配置元素。它解决了数据库字段名与Java对象属性名不一致时的映射问题,是MyBatis实现ORM(对象关系映射)的关键组件。

### 1.2 resultMap与resultType的区别
- **resultType**:直接指定返回类型,要求数据库列名与Java属性名完全一致(或开启自动驼峰转换)
- **resultMap**:通过显式配置建立列与属性的映射关系,支持复杂映射场景

```xml
<!-- resultType示例 -->
<select id="selectUser" resultType="com.example.User">
  SELECT id, user_name, age FROM user
</select>

<!-- resultMap示例 -->
<resultMap id="userResultMap" type="com.example.User">
  <!-- 映射配置 -->
</resultMap>

二、column与property属性详解

2.1 column属性

2.2 property属性

2.3 基本映射示例

<resultMap id="basicMap" type="User">
  <id property="id" column="user_id"/>
  <result property="username" column="user_name"/>
  <result property="age" column="user_age"/>
</resultMap>

三、不同场景下的使用方式

3.1 简单字段映射

当数据库字段与Java属性命名风格不同时:

<resultMap id="userMap" type="User">
  <!-- 主键字段 -->
  <id property="id" column="user_id"/>
  
  <!-- 普通字段 -->
  <result property="userName" column="user_name"/>
  <result property="createdAt" column="create_time"/>
</resultMap>

3.2 一对一关联映射

处理对象间的1:1关系:

<resultMap id="orderWithUserMap" type="Order">
  <id property="id" column="order_id"/>
  
  <!-- 关联用户对象 -->
  <association property="user" javaType="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
  </association>
</resultMap>

3.3 一对多/多对多映射

处理集合类型属性:

<resultMap id="userWithOrdersMap" type="User">
  <id property="id" column="id"/>
  
  <!-- 订单集合 -->
  <collection property="orders" ofType="Order">
    <id property="id" column="order_id"/>
    <result property="amount" column="order_amount"/>
  </collection>
</resultMap>

四、高级映射技巧

4.1 自动映射与手动映射结合

<!-- 开启autoMapping后,未明确配置的字段会自动映射 -->
<resultMap id="autoMap" type="User" autoMapping="true">
  <!-- 只手动映射命名不一致的字段 -->
  <result property="email" column="user_email"/>
</resultMap>

4.2 继承映射配置

复用已定义的resultMap:

<resultMap id="baseUserMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
</resultMap>

<resultMap id="extendedUserMap" extends="baseUserMap">
  <result property="email" column="email"/>
</resultMap>

4.3 嵌套查询映射

通过select实现延迟加载:

<resultMap id="orderWithUserMap" type="Order">
  <association property="user" column="user_id" 
               select="selectUserById"/>
</resultMap>

<select id="selectUserById" resultType="User">
  SELECT * FROM user WHERE id = #{id}
</select>

五、常见问题与解决方案

5.1 映射失败的常见原因

  1. 大小写问题:数据库列名与配置不一致
  2. 属性拼写错误:Java属性名拼写错误
  3. 类型不匹配:数据库类型与Java类型无法自动转换
  4. 缺少setter方法:Java Bean缺少对应属性的setter

5.2 最佳实践建议

  1. 统一命名规范:建议数据库使用下划线,Java使用驼峰
  2. 显式配置主键:总是明确配置元素
  3. 复杂映射分步处理:先建立基础映射,再处理关联关系
  4. 使用自动映射:结合autoMapping减少配置量

六、实际应用示例

6.1 电商系统用户订单映射

<resultMap id="userOrderDetailMap" type="User">
  <id property="userId" column="u_id"/>
  <result property="userName" column="u_name"/>
  
  <collection property="orders" ofType="Order">
    <id property="orderId" column="o_id"/>
    <result property="orderAmount" column="o_amount"/>
    
    <collection property="items" ofType="OrderItem">
      <result property="productName" column="oi_product"/>
      <result property="quantity" column="oi_quantity"/>
    </collection>
  </collection>
</resultMap>

6.2 动态列名处理

当列名需要动态确定时:

<resultMap id="dynamicColumnMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="${dynamicColumn}"/>
</resultMap>

七、总结

resultMap的column和property属性是MyBatis实现灵活映射的基础: - column始终代表数据库侧的列名 - property始终代表Java对象的属性名 - 合理使用可以处理各种复杂的映射场景 - 结合自动映射和继承机制能显著减少配置工作量

掌握resultMap的配置技巧,能够有效解决实际开发中90%以上的ORM映射问题,是MyBatis高效使用的关键技能。


提示:在实际开发中,建议结合MyBatis的日志功能(开启debug级别)来调试映射问题,可以清晰看到属性赋值的过程和结果。 “`

这篇文章共计约2200字,全面介绍了MyBatis中resultMap的column和property属性的使用方法,包含基础概念、详细配置示例、高级技巧和实际问题解决方案,采用Markdown格式编写,层次清晰,适合作为技术文档参考。

推荐阅读:
  1. Mybatis中resultMap如何使用
  2. mybatis中resultMap 标签的使用教程

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

mybatis resultmap

上一篇:C++中怎么使用OpenCV制作哈哈镜图像效果

下一篇:Mybatis实现分包定义数据库的原理与过程是什么

相关阅读

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

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