// Serivce 代码片段
// Mapper.java 接口入参为 Map
params.put("createTimeBegin", DateUtil.formatDate(DateUtil.getTodayBeginDate(),"yyyy-MM-dd HH:mm:ss")); // 当前日期
params.put("createTimeEnd",DateUtil.formatDate(DateUtil.getTomorrowBeginDate(),"yyyy-MM-dd HH:mm:ss")); // 明日日期
// MyBatis Mapper.xml
<if test="createTimeBegin != null and createTimeEnd != null">
AND gmt_create BETWEEN #{createTimeBegin} AND #{createTimeEnd}
</if>
单元测试前已经在本地MySQL工具中测试过,有返回值
单元测试结果返回值为空
异常调试
初步确认为 #{} 与 ${} 的问题,以为字符串传递过程中出现问题
再次测试依然无结果
又想到datetime为时间类型,可能不接收String类型的传参,去掉DateUtil.format 直接传 Date ,结果正确
项目交付后,再次测试传递字符串,发现当时不是字符串的问题
public static String formatDate(Date date, String format) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
return simpleDateFormat.format(date);
}
public static Date getTodayBeginDate() {
int y, m, d;
Calendar cal = Calendar.getInstance();
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH);
d = cal.get(Calendar.DATE);
cal.set(y, m, d, 0, 0, 0);//时、分、秒,设置成0,获取凌晨的时间
return cal.getTime();
}
public static void main(String[] args) {
Date todayBeginDate = DateUtil.getTodayBeginDate();
System.out.println(todayBeginDate.toString()); // Thu Oct 04 00:00:00 CST 2018
String s = DateUtil.formatDate(todayBeginDate, "yyyy-MM-dd hh:mm:ss");
System.out.println(s); // 2018-10-04 12:00:00
// 相差12个小时
}