Mybatis框架中结果映射resultMap标签方法属性收录

Mybatis框架中结果映射resultMap标签收录

在MyBatis框架中,resultMap 是一种强大的机制,用于将数据库结果集映射到Java对象上。它允许你定义如何将查询结果中的列映射到Java对象的属性上,尤其是当数据库表的字段名与Java对象的属性名不一致时,或者需要进行复杂的映射(如一对一、一对多关系)时,resultMap 就显得尤为重要。

1. 基本结构

一个基本的resultMap定义如下:

<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id"/>
  <result property="username" column="user_name"/>
  <result property="password" column="user_password"/>
</resultMap>

在这个例子中:

  • id 属性定义了resultMap的唯一标识符。
  • type 属性指定了映射到的Java类型。
  • idresult 元素用于定义主键和普通属性的映射。
  • property 属性是Java对象的属性名。
  • column 属性是数据库表的列名。

2. 方法使用

select语句中使用resultMap

<select id="selectUserById" resultMap="userResultMap">
  SELECT user_id, user_name, user_password FROM users WHERE user_id = #{id}
</select>

在这个select语句中,resultMap属性引用之前定义的userResultMap

3. 高级映射

resultMap 还支持更复杂的映射,如关联(association)、集合(collection)、鉴别器(discriminator)等。

关联(Association)

用于一对一关系的映射:

<resultMap id="orderResultMap" type="Order">
  <id property="id" column="order_id"/>
  <result property="orderNumber" column="order_number"/>
  <association property="user" javaType="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
  </association>
</resultMap>
集合(Collection)

用于一对多关系的映射:

<resultMap id="userResultMapWithOrders" type="User">
  <id property="id" column="user_id"/>
  <result property="username" column="user_name"/>
  <collection property="orders" ofType="Order">
    <id property="id" column="order_id"/>
    <result property="orderNumber" column="order_number"/>
  </collection>
</resultMap>

4. 方法总结

回顾概念
  • ID:在resultMap中,可以为每个映射指定一个唯一的ID,以便于引用。
  • Result:基本的结果映射,可以指定列名和对象属性名之间的映射关系。
  • Association:用于处理一对一的关系映射。例如,一个订单(Order)对象关联一个用户(User)对象。
  • Collection:用于处理一对多的关系映射。例如,一个用户(User)对象关联多个订单(Order)对象。
  • Discriminator:用于处理类的继承关系映射,根据数据库中的某个字段值来决定实例化哪个子类。

resultMap 是MyBatis中用于处理复杂数据映射的关键特性。通过定义resultMap,可以灵活地将数据库中的数据映射到Java对象上,处理不同命名规则、复杂关系等问题。正确使用resultMap可以大大提高数据访问层的灵活性和可维护性。

image-20240614100908507

示例演示

假设有一个用户表(users)和一个订单表(orders),用户表中有用户ID(user_id)、用户名(username),订单表中有订单ID(order_id)、用户ID(user_id, 作为外键)和订单详情(details)。

本示例过程中我们要实现从订单表查询订单的同时,也获取到该订单对应的用户信息。

首先,在MyBatis的映射文件中定义一个resultMap:

1<resultMap id="OrderResultMap" type="com.example.Order">
2    <id property="orderId" column="order_id"/>
3    <result property="details" column="details"/>
4    
5    <!-- Association映射,用来处理一对一关系 -->
6    <association property="user" javaType="com.example.User">
7        <id property="userId" column="user_id"/>
8        <result property="username" column="username"/>
9    </association>
10</resultMap>

然后,在查询语句中引用这个resultMap:

1<select id="selectOrderWithUser" resultMap="OrderResultMap">
2    SELECT o.order_id, o.details, u.user_id, u.username
3    FROM orders o
4    LEFT JOIN users u ON o.user_id = u.user_id
5</select>

这样,当执行这个查询时,MyBatis会自动根据OrderResultMap中定义的映射规则,将查询结果转换成Order对象,并且正确地将关联的用户信息填充到Order对象的user属性中。

了解更多知识请戳下:

@Author:懒羊羊

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会撸代码的懒羊羊

打赏5元,买杯咖啡醒,继续创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值