IBatis 利用對映檔案描述物件間的關係

2021-08-29 06:56:02 字數 1843 閱讀 5084

對映兩表之間的關係通過兩個和兩個元素來完成,用vo來描述兩表之間的關係在ibatis框架中,其實仍然是通過sql來完成的。

怎樣用sql來表達「一對多」和「多對一」的關係呢?可以利用主表的主鍵作為從表的外來鍵對從表查詢,得到的結果就是「一對多」的關係。那麼「多對一」呢?可以利用從表的外來鍵對主表進行查詢,只能得到惟一的一條記錄。因此,必須首先做兩個sql。

1. 用sql描述關係

parameterclass=」string」

resultmap=」get-attacksolution-result」>

select *

from fw_attacksolution

where parents_attack_event_code = #parents_attack_event_code#

parameterclass=」string」

resultmap=」get-pattackdocument-result」>

select *

from attack_document_parents

where parents_attack_event_code = #parents_attack_event_code#

利用元素來完成兩句sql語句,id為「getattacksolution」的一句,表示根據attack_document_parents表的主鍵到fw_attacksolution表中進行查詢,得到的是多條fw_attacksolution表中的記錄,這就是「一對多」的關係描述。id為「getpattackdocument」的一句**,是根據parents_attack_event_code欄位到attack_document_parents表中進行查詢,由於parents_attack_event_code欄位是attack_document_parents表的主鍵,所以查詢結果必然只有一條,那這就可以表示「一對一」的關係。

2. 關係的對應

接著需要將這些sql對映到物件上去。在pattackdocument vo中有乙個變數屬性的型別為list,名為attacksolution,它表示了多個attacksolution vo的集合,那麼這在sql對映到物件的元素中怎麼表示呢?請看下面的**:

class=」struts.sample.cap11.sample1.entity.pattackdocument」>

column=」parents_attack_event_code」 select=」getattacksolution」/>

和沒有關係對應的元素相比,多了乙個select屬性,這個select屬性在關係對映中的作用非常大,通過select屬性指定的標識可以惟一找到一句查詢sql,而這句查詢sql就表達了「一對多」的關係。這段**的解釋可以是這樣的:如果有查詢返回的是「get-pattackdocument-result」所指定的vo,當將結果集寫入vo的變數屬性時,得到乙個jdbc無法識別的list型別。於是底層框架就會查詢select屬性所指定的查詢sql語句。執行這個子查詢,並將子查詢的結果集寫入list,返回到vo的變數屬性attacksolution中。

在attacksolution vo中還有乙個pattackdocument的變數屬性,它的型別是pattackdocument,同樣也可以用元素來宣告。

class=」struts.sample.cap11.sample1.entity.attacksolution」>

column=」parents_attack_event_code」 select=」getpattackdocument」/>

它的工作方式和之前所描述的沒有差別,惟一的區別是select屬性所指定的查詢sql語句查詢結果必然是一條記錄,即乙個物件例項。

可見,select屬性所指定的查詢sql既可以是乙個集合,也可以是乙個物件。

1 IBatis 利用對映檔案描述物件間的關係

對映兩表之間的關係通過兩個 和兩個元素來完成,用 vo來描述兩表之間的關係在 ibatis 框架中,其實仍然是通過 sql來完成的。怎樣用sql來表達 一對多 和 多對一 的關係呢?可以利用主表的主鍵作為從表的外來鍵對從表查詢,得到的結果就是 一對多 的關係。那麼 多對一 呢?可以利用從表的外來鍵對...

ibatis對映檔案配置

id 指定了操作id,之後我們可以在 中通過指定操作id 來執行此節點所定 義的操作,如 sqlmap.update updateuser user id設定使得在乙個配置檔案中定義兩個同名節點成為可能 兩個update節 點,以不同id區分 parameterclass 指 定 了操作所需的引數型...

iBATIS 如何對sql 輸入引數 的對映

一 輸入引數的對映 1 parameterclass的使用 2 parametermap的使用 3 如何用map型別的物件作為傳入引數 b parameterclass b insert into t user values null,username password select identit...