您好,登錄后才能下訂單哦!
有時我們厭倦了為每個查詢寫一個Entity類,這時Map開始發揮它的功效。
對于要返回“學號,班級,姓名”結果的查詢,可以這樣寫Mapper:
<select id="selectStudent">
select s.code as sNo , s.name as sName, c.name as cName
from xStudent s, xClass c
where s.cID = c.ID
</select>
如下聲明我們的dao方法:
public List<Map<String, Object>> selectStudent(Map<String, Object> parameter) {
return getSqlSession().selectList(getStatement("selectStudent"), parameter);
}
如果要將該查詢結果轉為JSON字符串返回,那么我們就可以直接將List<Map<String, Object>轉為JSON,邏輯層不需要任何代碼。
如果返回的結果集需要按select中的字段順序返回,那么將resultType="java.util.HashMap" 換為resultType="java.util.LinkedHashMap"
------------------------------華麗分割線-----------------------------
使用Map封裝查詢結果時注意數據的類型映射
對于如下的Mapper
<select id="selectStudent">
select s.code as sNo , concat(s.firstName, s.lastName) as sName
from xStudent s
</select>
Mybatis會傻傻的將sName的數據類型映射為byte[], 因為我們沒有提供entity,mybatis也不知道我們想要什么類型,而sName是計算出來的值,mybatis也沒有辦法從數據庫中獲取字段的值,所以它就將其封裝為byte[],解決辦法很簡單,加一個cast 函數
<select id="selectStudent">
select s.code as sNo , cast(concat(s.firstName, s.lastName) AS CHAR) as sName
from xStudent s
</select>
------------------------------------華麗分割線--------------------------------
之前講到了orcale的字符串與日期等類型的轉換,現在我們來看看MySQL是怎么轉換的。比起orcale,MySQL相比之下就簡單得多了,只需要一個Cast()函數就能搞定。其語法為:Cast(字段名 as 轉換的類型 ),其中類型可以為:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和時間型
DECIMAL float型
SIGNED int
TIME 時間型
例如表table1
date
2015-11-03 15:31:26
select cast(date as signed) as date from table1;
結果如下:
date
20151103153126
select cast(date as char) as date from table1;
結果如下:
date
2015-11-03 15:31:26
select cast(date as datetime) as date from table1;
結果如下:
date
2015-11-03 15:31:26
select cast(date as date) as date from table1;
結果如下:
date
2015-11-03
select cast(date as time) as date from table1;
結果如下:
date
15:31:26
這里date對應日期,time對應時間
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。