通常 ResultMap 能夠將 SELECT 出的結果列值 映射到 Javabean 的屬性值上 以下看看一個簡單的範例
<resultMap id="allProductManager" class="org.pojo.ProductManager">
<result property="id" column="PM_ID"/>
<result property="account" column="PM_ACCOUNT"/>
<result property="name" column="PM_NAME"/>
<result property="idcode" column="PM_IDCODE" nullValue="-1"/>
</resultMap>
resultMap 的標籤中 id 屬性能夠讓 select 或是其他的 statement 進行識別,所以切記它要唯一
class 屬性告訴 resultMap 要將結果映射到哪個 Javabean 上
在 resultMap 的內容區還要加上 result 標籤才能將資料表的欄位和 Javabean 的屬性作關聯
result 標籤除了 column 和 property 屬性之外,大概還有如下列的其他屬性
1. nullValue : 當此欄位在資料表中為 null 時,映射到 Javabean 時就以 nullValue 的值表示
2. javaType : 通常在正常情況下都會透過反射而得到 Javabean 的屬性型態
3. select : 這個屬性值必須是一個 mapped Statement 的操作(之後再論)
介紹完之後,其實通常我們可以不用像上述這樣寫一個 resultMap 來接收
可以直接用隱式的 resultMap 來定義,如以下所示 直接在 select 標籤中表示
<select id="getPM" parameterClass="int" resultClass="org.pojo.ProductManager">
SELECT
PM_ID as id,
PM_ACCOUNT as account,
PM_NAME as name,
PM_IDCODE as idcode
FROM t_pm WHERE id = #value#
PM_ID as id,
PM_ACCOUNT as account,
PM_NAME as name,
PM_IDCODE as idcode
FROM t_pm WHERE id = #value#
</select>
以上的 mapped Statement 定義了一個 ResultMap 屬性,並且替每個欄位取了別名用來與 ProductManager 的屬性作關聯˙
而 resultMap 也可以直接接收 Java 的基本型態,如:String、Integer、boolean
甚至他還能接收 Java 的 Map 型態,如:HashMap
<resultMap id="allProductManager" class="java.util.HashMap">
<result property="id" column="PM_ID"/>
<result property="account" column="PM_ACCOUNT"/>
<result property="name" column="PM_NAME"/>
<result property="idcode" column="PM_IDCODE" nullValue="-1"/>
</resultMap>
通常會透過 executeQueryForList() 的方法取得所有結果並放入一個 List 如下程式所示
List list = (List)sqlMapClient.queryForList("getPM"); Iterator iterator = list.iterator(); while(iterator.hasNext()){ Map map = (Map)iterator.next(); //List 裡面是一個個 Map 物件 System.out.println(map.get("name")); //name 為其中一個 key }
之後再介紹複雜類型屬性 !
作者已經移除這則留言。
回覆刪除