mybatis查询当年、当天的数据,查询当年每个月的数据
最近遇到公司的需求,查询一个表里面当年的数据和当年每个月的数据。
测试数据表如下:
很显然我们要对time字段进行操作。
查询当天的数据
我们可以在where后面这么写:
AND TO_DAYS(rgv_table.time) = TO_DAYS(NOW())
查询当年的数据
AND YEAR(rgv_table.time) = YEAR(NOW())
查询当年每个月的数据
就是把当年每一个月的数据都查询出来,
我们可以在where后面这么写:
<if test="month != null and month==1">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-01')
</if>
<if test="month != null and month==2">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-02')
</if>
<if test="month != null and month==3">
AND DATE_FORMAT( rgv_table.time'%Y-%m') = CONCAT(YEAR(NOW()), '-03')
</if>
<if test="month != null and month==4">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-04')
</if>
<if test="month != null and month==5">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-05')
</if>
<if test="month != null and month==6">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-06')
</if>
<if test="month != null and month==7">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-07')
</if>
<if test="month != null and month==8">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-08')
</if>
<if test="month != null and month==9">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-09')
</if>
<if test="month != null and month==10">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-10')
</if>
<if test="month != null and month==11">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-11')
</if>
<if test="month != null and month==12">
AND DATE_FORMAT( rgv_table.time,'%Y-%m') = CONCAT(YEAR(NOW()), '-12')
</if>
字段month在我们实体类中用 @Transient注解的字段,这样不会被识别为表里面的字段。
/**
* 月份
*/
@Transient
private Integer month;
然后我们在ServiceImpl里面循环设置month字段为1-12,分别调用查询方法,可以查询出每个月的数据。