mybatis一对多映射怎么做

922
2023/11/21 23:17:38
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在MyBatis中,一对多映射可以通过以下几种方式实现:

  1. 使用嵌套查询(Nested Queries):在父实体对象中定义一个子实体对象的集合,并且使用嵌套查询语句来获取子实体对象的数据。例如:
<!-- 父实体对象 -->
<resultMap id="parentResultMap" type="Parent">
  <id property="id" column="id" />
  <result property="name" column="name" />
  <!-- 子实体对象集合 -->
  <collection property="children" ofType="Child">
    <id property="id" column="child_id" />
    <result property="name" column="child_name" />
  </collection>
</resultMap>

<!-- 查询语句 -->
<select id="getParents" resultMap="parentResultMap">
  SELECT p.id, p.name, c.id AS child_id, c.name AS child_name
  FROM parent_table p
  LEFT JOIN child_table c ON p.id = c.parent_id
</select>
  1. 使用嵌套结果(Nested Results):在父实体对象中定义一个包含子实体对象的属性,并且使用嵌套结果标签来映射子实体对象的数据。例如:
<!-- 父实体对象 -->
<resultMap id="parentResultMap" type="Parent">
  <id property="id" column="id" />
  <result property="name" column="name" />
  <!-- 子实体对象 -->
  <association property="child" javaType="Child">
    <id property="id" column="child_id" />
    <result property="name" column="child_name" />
  </association>
</resultMap>

<!-- 查询语句 -->
<select id="getParents" resultMap="parentResultMap">
  SELECT p.id, p.name, c.id AS child_id, c.name AS child_name
  FROM parent_table p
  LEFT JOIN child_table c ON p.id = c.parent_id
</select>
  1. 使用嵌套选择(Nested Selects):在父实体对象中定义一个包含子实体对象的属性,并且使用嵌套选择标签来获取子实体对象的数据。例如:
<!-- 父实体对象 -->
<resultMap id="parentResultMap" type="Parent">
  <id property="id" column="id" />
  <result property="name" column="name" />
  <!-- 子实体对象 -->
  <association property="child" javaType="Child" select="getChildsByParentId" />
</resultMap>

<!-- 子实体对象的查询语句 -->
<select id="getChildsByParentId" resultType="Child">
  SELECT id, name
  FROM child_table
  WHERE parent_id = #{id}
</select>

<!-- 查询语句 -->
<select id="getParents" resultMap="parentResultMap">
  SELECT id, name
  FROM parent_table
</select>

其中,getChildsByParentId是一个独立的查询语句,用于获取子实体对象的数据。而嵌套选择标签中的select属性则指定了要执行的查询语句。

以上是几种常见的一对多映射实现方式,根据具体的业务需求和数据结构,可以选择适合的方式来实现。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: mybatis多数据源切换不生效怎么解决