// 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个小时
}
需求描述检索当天的数据MyBatis 实现方案: time like “yyyy-MM-dd%” time between “今天0点” and “明日0点”选择了后者,实现过程中通过 parameterMap = “java.util.Map” 封装参数传入,value 为String类型,Mapper.xml 中通过 #{} 或 ${} 都不正确,因为接口执行后根本无返回值...