最近用到了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 !=''">
= DATE_FORMAT(#{startTime}, '%Y-%m-%d %H:%T:%s') ]]>
if>
<if test="endTime != null and endTime!=''">
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 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}]
以上两种格式可以无限的嵌套