日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

MyBatis多表映射

作者:W-琑 更新時間: 2024-03-07 編程語言

目錄

1.對一映射

2.對多映射

3.多表映射總結

1)多表映射優化


  • 對一:屬性中包含對方對象
  • 對多:屬性中包含對方對象集合

1.對一映射

需求:根據ID查詢訂單,以及訂單關聯的用戶的信息!

<!-- 創建resultMap實現“對一”關聯關系映射 -->
<!-- id屬性:通常設置為這個resultMap所服務的那條SQL語句的id加上“ResultMap” -->
<!-- type屬性:要設置為這個resultMap所服務的那條SQL語句最終要返回的類型 -->
<resultMap id="selectOrderWithCustomerResultMap" type="order">

  <!-- 先設置Order自身屬性和字段的對應關系 -->
  <id column="order_id" property="orderId"/>

  <result column="order_name" property="orderName"/>

  <!-- 使用association標簽配置“對一”關聯關系 -->
  <!-- property屬性:在Order類中對一的一端進行引用時使用的屬性名 -->
  <!-- javaType屬性:一的一端類的全類名 -->
  <association property="customer" javaType="customer">

    <!-- 配置Customer類的屬性和字段名之間的對應關系 -->
    <id column="customer_id" property="customerId"/>
    <result column="customer_name" property="customerName"/>

  </association>

</resultMap>

<!-- Order selectOrderWithCustomer(Integer orderId); -->
<select id="selectOrderWithCustomer" resultMap="selectOrderWithCustomerResultMap">

  SELECT order_id,order_name,c.customer_id,customer_name
  FROM t_order o
  LEFT JOIN t_customer c
  ON o.customer_id=c.customer_id
  WHERE o.order_id=#{orderId}

</select>

對應關系:

關鍵詞:

在“對一”關聯關系中,我們的配置比較多,但是關鍵詞就只有:association和javaType

2.對多映射

需求:查詢客戶和客戶關聯的訂單信息!

<!-- 配置resultMap實現從Customer到OrderList的“對多”關聯關系 -->
<resultMap id="selectCustomerWithOrderListResultMap"

  type="customer">

  <!-- 映射Customer本身的屬性 -->
  <id column="customer_id" property="customerId"/>

  <result column="customer_name" property="customerName"/>

  <!-- collection標簽:映射“對多”的關聯關系 -->
  <!-- property屬性:在Customer類中,關聯“多”的一端的屬性名 -->
  <!-- ofType屬性:集合屬性中元素的類型 -->
  <collection property="orderList" ofType="order">

    <!-- 映射Order的屬性 -->
    <id column="order_id" property="orderId"/>

    <result column="order_name" property="orderName"/>

  </collection>

</resultMap>

<!-- Customer selectCustomerWithOrderList(Integer customerId); -->
<select id="selectCustomerWithOrderList" resultMap="selectCustomerWithOrderListResultMap">
  SELECT c.customer_id,c.customer_name,o.order_id,o.order_name
  FROM t_customer c
  LEFT JOIN t_order o
  ON c.customer_id=o.customer_id
  WHERE c.customer_id=#{customerId}
</select>

對應關系:

關鍵詞:

在“對多”關聯關系中,同樣有很多配置,但是提煉出來最關鍵的就是:“collection”和“ofType”

3.多表映射總結

1)多表映射優化

我們可以將autoMappingBehavior設置為full,進行多表resultMap映射的時候,可以省略符合列和屬性命名映射規則(列名=屬性名,或者開啟駝峰映射也可以自定映射)的result標簽!

修改mybati-sconfig.xml:

<!--開啟resultMap自動映射 -->
<setting name="autoMappingBehavior" value="FULL"/>

修改teacherMapper.xml

<resultMap id="teacherMap" type="teacher">
    <id property="tId" column="t_id" />
    <!-- 開啟自動映射,并且開啟駝峰式支持!可以省略 result!-->
<!--        <result property="tName" column="t_name" />-->
    <collection property="students" ofType="student" >
        <id property="sId" column="s_id" />
<!--            <result property="sName" column="s_name" />-->
    </collection>
</resultMap>

2)多表映射總結

原文鏈接:https://blog.csdn.net/weixin_69134926/article/details/136486871

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新