五 Mybatis一對多關係的配置要點

2021-08-19 20:10:44 字數 1767 閱讀 2902

1.<*select>標籤中查詢出來的類名要和<resultmap>中的column屬性值一致。但規定<resultmap>*的column屬性值不能寫成「表名.列名」,而是直接寫資料庫中的列名或別名。

2.如果兩個表中都有id屬性,但因為規定<*resultmap>*的column屬性值不能寫成「表名.列名」,這時候要怎麼辦呢?可以用別名來代替。

3.在主表類的sql配置文件的<*resultmap>標籤下需要新增乙個<collection>標籤來指明我當前主表這個類裡包含著子表類的集合。其中<collection>標籤下存在property屬性與resultmap屬性,沒有column屬性,因為在資料庫表中不會額外建立乙個此集合的字段。property屬性表示主表類中哪個屬性名,resultmap屬性要指明包含的子表類的sql配置檔案的<resultmap>*標籤的id值。

例:

"com.imooc.command" id="command"> 

"cid" jdbctype="integer" property="id"/>

"name" jdbctype="varchar" property="name"/>

//因為是跨檔案所以要namespace.id

"contentlist" resultmap="content.content"/>

注意:

特別要注意的是column屬性對應資料庫表的欄位名與select子句選擇的欄位名匹配起來。如果select u.name as username from user as u;雖然在資料庫表中的欄位名是name,但是select子句為name字段設定了別名,即username,因此在<**resultmap>標籤下的<result>標籤的**column屬性要等於username而並非name,是與select子句中的名稱匹配,要注意當設定了別名那麼column屬性也為別名!!!

4.且當select u.name from user as u,column**<resultmap>標籤下的<result>的column屬性不能寫成u.name,不能帶表名。因為在jdbc的resultset介面根據列名獲取資料的方法中,根據的列名是沒有表名字首的,因此表名字首會失效。所以在mybatis一對多關聯的sql配置文件下的<**select>標籤的sql語句不能出現兩個欄位名相同的查詢,否則在相關聯的不同sql配置檔案的<resultmap>標籤下的其他標籤的**column屬性就會重複,mybatis並不知道這個重複的字段是屬於哪個表的。所以要麼起別名,要麼設計資料庫不同表之間不能出現同名的列名。

sqlalchemy 一對多 關係

import os import sqlalchemy from sqlalchemy import create engine,column,integer,string,foreignkey,sequence from sqlalchemy.ext.declarative import decl...

Mvc Entityfraome一對多關係對映

第一資料庫建立 第二建立mvc ef專案 注意要點 如下資料庫表 t classes,t students 建立兩個類與資料庫表相對應 public class class public string name public virtual icollectionstudent new list p...

hibernate 一對多關係

1.首先在實體類描述資料庫主外來鍵關係,比如 我有多個訂單項 private setoritems new hashset 在order item定義order 屬性 2.需要在對映的實體類描述關係,我這裡是乙個訂單有多個訂單項 order.hbm.xml order item.hbm.xml 關於...