mybatis+mysql時間查詢以及map傳參,controller接受時間日期型別的引數
最近用到了mybatis+mysql時間查詢以及map傳參
其實用map傳參,真的很方便,將引數以鍵值對的方式存入map,在map.xml檔案中引數型別就是
parameterType="java.util.HashMap"
取值的時候取map中的key就行了。注:一下程式碼中如果沒有
<select id="countReportBySiteId" parameterType="java.util.HashMap" resultType="java.lang.Integer">
SELECT COUNT(*) FROM g_oa_report WHERE site_id=#{siteId} AND (report_status=1 OR report_status=2)
<if test="startTime != null and startTime !=''">
<![CDATA[ and publish_time >= DATE_FORMAT(#{startTime}, '%Y-%m-%d %H:%T:%s') ]]>
</if>
<if test="endTime != null and endTime!=''">
<![CDATA[ and publish_time <= DATE_FORMAT(#{endTime}, '%Y-%m-%d %H:%T:%s') ]]>
</if>
</select>
controller
@RequestMapping("/countBySiteId")
@ResponseBody
/* public ApiResult countBySiteId(Integer siteId,HttpSession session){*/
public ApiResult countBySiteId(Integer siteId,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss" ) Date startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime,
HttpSession session) throws ParseException {
// 定義一個map來封裝引數。然後直接傳遞給map做引數
Map<String ,Object> hashMap = new HashMap();
hashMap.put("siteId",siteId);
hashMap.put("startTime",startTime);
hashMap.put("endTime",endTime);
這裡js穿過來的是一個json字串
var _queryParam = {
pageSize: 50,
pageNumber: 1,
startTime: "",
endTime: "",
siteId: 0
}
在後臺獲取的時候,你可以寫多個物件,去接收前臺穿過來的引數,但條件是,你物件裡的屬性名得和傳遞過來的每個引數名字樣,它會自動幫我們封裝到物件了。
這裡我們並沒有實體類與前臺傳遞過來的引數對應,於是我們就用了很多的物件去接收,如String,Date等,它會根據相應的格式自動去封裝。
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”) Date startTime,可以將前臺傳遞過來的字串轉換成日期格式(如果直接以日期格式來接受的或會報錯)
附:時間是一個比較常用的型別。顯示的時候通常是以String顯示的。如果前端引數,前端人員也希望用String作為引數
常用註解
@DatetimeFormat是將String轉換成Date,一般前臺給後臺傳值時用
@JsonFormat(pattern=”yyyy-MM-dd”) 將Date轉換成String 一般後臺傳值給前臺時
@JsonFormat會讓時間以0區時間顯示。如果直接使用會少了8小時(我所在的是北京時區)修改為
@JsonFormat(pattern=”yyyy-MM-dd”,timezone=”GMT+8”)
ps:在後端向前端傳遞資料的時候,我們傳遞一個map物件,那麼他就是一個物件,我們可以直接點出屬性:資料結構{屬性1,屬性2}
map的json格式:{屬性1,屬性2}
如果是一個list集合那麼他是一個數組的形式,裡面有很多的物件[{物件1},{物件2}]
list的json格式:[{物件1},{物件2}]
以上兩種格式可以無限的巢狀