Mybatis中的<collection>

文章介绍了Mybatis中如何使用标签映射一对多或多对多关系,包括<collectionproperty>的属性说明,如property、ofType和select,以及如何在查询时自动执行相关SQL。
摘要由CSDN通过智能技术生成

Mybatis中的标签用于映射一对多或多对多的关系,它可以将查询结果中的多个子对象映射到一个集合属性中。

标签的属性说明如下:

  • property:集合属性的名称。
  • column:关联查询中子对象的外键列名。
  • javaType:集合属性的类型,可以是List、Set、Map等。
  • ofType:集合元素的类型,可以是任意Java类型。
  • select:关联查询子对象的SQL语句。

下面是一个使用标签的示例:

<resultMap id="userMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <collection property="orders" ofType="Order" select="selectOrdersByUserId">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
  </collection>
</resultMap>

<select id="selectUserById" resultMap="userMap">
  select * from user where id = #{id}
</select>

<select id="selectOrdersByUserId" resultType="Order">
  select * from order where user_id = #{id}
</select>

以上示例中,我们定义了一个User对象和一个Order对象,它们之间是一对多的关系,即一个用户可以拥有多个订单。在User对象的映射中,我们使用了标签来映射用户的订单集合,其中:

  • property属性为orders,表示User对象中的订单集合属性名为orders。
  • ofType属性为Order,表示订单集合中的元素类型为Order。
  • select属性为selectOrdersByUserId,表示查询用户的订单集合的SQL语句为selectOrdersByUserId。

在查询用户信息时,Mybatis会自动执行selectUserById查询语句,并将查询结果映射到User对象中。同时,Mybatis会根据标签中定义的select属性,自动执行selectOrdersByUserId查询语句,将查询结果映射为一个Order对象的集合,并设置到User对象的orders属性中。

示例SQL如下:

CREATE TABLE user (
  id INT PRIMARY KEY,
  name VARCHAR(20)
);

CREATE TABLE order (
  id INT PRIMARY KEY,
  name VARCHAR(20),
  user_id INT,
  FOREIGN KEY (user_id) REFERENCES user(id)
);

INSERT INTO user VALUES (1, '张三');
INSERT INTO user VALUES (2, '李四');

INSERT INTO order VALUES (1, '订单1', 1);
INSERT INTO order VALUES (2, '订单2', 1);
INSERT INTO order VALUES (3, '订单3', 2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值