mybatis -- HashMap 用法/例項:查詢文章分類下文章的數目
阿新 • • 發佈:2019-02-19
有兩張表,一張是文章分類表category,兩個欄位(id 分類編號,title 分類名稱);
一張是文章表article,三個欄位(id 文章編號,name 文章標題 ,content 文章內容,categoryid 所屬文章分類)
需求: 利用sql查找出一個分類下文章的數目。
分析:常規 xml中 寫 sql
最終我們需要三個欄位,分類id 分類名稱name 和每個分類下的數目count,三個欄位裡兩個欄位是文章分類表裡有的,而第三個沒有,這時就不能直接返回分類表對應的實體類了。採用HashMap就可以很方便的解決這個問題。SELECT tab1.id AS id,tab1.title AS title,nvl(tab2.count,0) AS COUNT FROM CATEGORY tab1 LEFT JOIN (SELECT COUNT(ID) AS COUNT,categoryid FROM ARTICLE ar GROUP BY ar.categoryid) tab2 ON tab1.id = tab2.categoryid
mybatis xml 檔案中程式碼如下:
<select id="xxxxx" resultType="java.util.HashMap"> SELECT tab1.id AS id,tab1.title AS title,nvl(tab2.count,0) AS COUNT FROM CATEGORY tab1 LEFT JOIN (SELECT COUNT(ID) AS COUNT,categoryid FROM ARTICLE ar GROUP BY ar.categoryid) tab2 ON tab1.id = tab2.categoryid </select>
返回值是HashMap型別,可以理解為動態的建立了一個HashMap集合,以鍵值對的形式儲存從資料庫裡的返回值,map.put("ID",xxx); map.put("NAME",xxx); map.put("COUNT",xxx);
需要注意的有兩點:
1.在Mapper.java裡,返回型別應寫成 List<Map<String,Object>>
2.map裡的鍵全都是相應欄位的大寫字母:map.put("ID",xxx); map.put("NAME",xxx); map.put("COUNT",xxx);
這裡貼一張資料庫檢視的結果方便理解:
補充:今天又遇到一個問題,如果title在資料庫裡的型別是clob型別,就取不到漢字了,需要對取出來的欄位做型別處理,直接應用ResultMap將會更簡單,下面直接上程式碼
xxxMapper.xml 程式碼:
<resultMap type="HashMap" id="categoryHashMap">
<result property="ID" column="id"/>
<result property="TITLE" column="title" javaType="String"/> <!-- 這裡將clob型別直接轉換為了String型別 -->
<result property="COUNT" column="count"/>
</resultMap>
<select id="xxxxx" resultMap="categoryHashMap">
SELECT tab1.id AS id,tab1.title AS title,nvl(tab2.count,0) AS COUNT
FROM CATEGORY tab1 LEFT JOIN
(SELECT COUNT(ID) AS COUNT,categoryid FROM ARTICLE ar GROUP BY ar.categoryid) tab2
ON tab1.id = tab2.categoryid
</select>
----- 筆者水平有限,如有不嚴謹的地方,請指教必改。