這也是 ibatis 好上手的原因,簡單說它的寫法都很直覺。以下看個 1:1 的例子
<resultMap id="getStudentResult" class=”com.ibatis.example.Product”>
<result property="student_id" column="STD_ID"/>
<result property="student_name" column="STD_NAME"/>
<result property="room" column="STD_ROOM_ID" select="getRoom"/>
</resultMap>
<resultMap id="getRoomResult" class=”com.ibatis.example.Category”>
<result property="room_id" column="ROOM_ID"/>
<result property="room_name" column="ROOM_NAME"/>
</resultMap>
<statement id="getStudent" parameterClass="int" resultMap="getStudentResult">
select * from STUDENT where STD_ID = #value#
</statement>
<statement id="getRoom" parameterClass="int" resultMap="getRoomResult">
select * from ROOM where ROOM_ID = #value#
</statement>
以上是一個 Sutdent 對應到一間 Room 的一對一關聯,在 Student 物件這邊有 reference 到一個 Room 物件
所以如果我們要撈出某一位 學生時,會針對這個 id 為 getStudent 的 mapping statemnet 做存取
可以看到它所對應到的 resultMap 中多了一個 room 屬性,如下:
<result property="room" column="STD_ROOM_ID" select="getRoom"/>
column 屬性即是在 table 中的欄位名稱,存放了對應的 ROOM table 的 ROOM_ID
select 屬性告訴了 iBatis 去執行另一個 SELECT 語句。即以上程式的最後一個 mapping statement
以撈出所對應的 Room 物件的資料。
以上就是一個很簡單的 1:1 的映射範例,以下介紹 1:N 的作法
同樣採用上述的例子不過觀點對調,我們從 Room 物件出發,他會有一個 List 屬性
裡面存放了各個的 Student 物件,產生一個一對多的關係。
這裡注意一點的就是,如果要讓一的一方擁有多的一方,則一這方的類別的
集合屬性的型態必須是 java.util.List 或是 java.util.Collection
以下看 SQL MAP 的範例
<resultMap id="getStudentResult" class=”com.ibatis.example.Product”>
<result property="student_id" column="STD_ID"/>
<result property="student_name" column="STD_NAME"/>
</resultMap>
<resultMap id="getRoomResult" class=”com.ibatis.example.Category”>
<result property="room_id" column="ROOM_ID"/>
<result property="room_name" column="ROOM_NAME"/>
<result property="students" column="ROOM_ID" select="getStudent"/>
</resultMap>
<statement id="getStudent" parameterClass="int" resultMap="getStudentResult">
select * from STUDENT where STD_ROOM_ID = #value#
</statement>
<statement id="getRoom" parameterClass="int" resultMap="getRoomResult">
select * from ROOM where ROOM_ID = #value#
</statement>
直接看看 Room 的 resultMap 的定義,同樣多了一個如下的 result 標籤
<result property="students" column="ROOM_ID" select="getStudent"/>
property 屬性表示了 Room 類別裡的所參照到的 Stduent 物件的屬性集合
column 屬性則表示接下去的 SELECT 語句時要使用的 ID,也就是說會透過
這個 ROOM_ID 去 STUDENT 這個 table 找出所有關聯的 Student 物件
沒有留言:
張貼留言