快捷搜索: 王者荣耀 脱发

mybatis的时间转化问题

1create_time在数据库中是datetime类型

1.1传字符串

1.1.1方式一(转成同一类型)

Integer countTargetRewardSettleAccounts(

@Param(“startTime”) String startTime, @Param(“endTime”) String endTime);

SELECT

COUNT(*)

FROM target_reward_settle_accounts_daily

WHERE

<![CDATA[

create_time >= str_to_date( #{
          
   startTime},%Y-%m-%d %H:%i:%s)

AND create_time < str_to_date( #{
          
   endTime},%Y-%m-%d %H:%i:%s)

]]>

1.1.2方式二(转成同一类型)

<if test="beginTime!=null and beginTime!=">
    <![CDATA[   and DATE_FORMAT(tr.add_time, %Y-%m-%d)>=  DATE_FORMAT(#{
          
   beginTime}, %Y-%m-%d)   ]]>
</if>
<if test="endTime!=null and endTime!=">
    <![CDATA[  and DATE_FORMAT(tr.add_time, %Y-%m-%d) <= DATE_FORMAT(#{
          
   endTime}, %Y-%m-%d)    ]]>
</if>

1.1.3方式三:

SELECT

COUNT(*)

FROM target_reward_settle_accounts_daily

WHERE

<![CDATA[

create_time >= #{
          
   startTime}

AND create_time < #{
          
   endTime}

]]>

1.2 传date

本身是同一种格式,但注意取值范围

Integer countTargetRewardSettleAccountsByDate(

@Param(“startTime”) Date startTime, @Param(“endTime”) Date endTime);

SELECT

COUNT(*)

FROM target_reward_settle_accounts_daily

WHERE

<![CDATA[

create_time >= #{
          
   startTime,jdbcType=TIMESTAMP}

AND create_time < #{
          
   endTime,jdbcType=TIMESTAMP}

]]>

当你想在实体类中使用java.util.Date类型,而且还想在数据库中保存时分秒时,你可以在xml中修改为:

#{xxdate,jdbcType=TIMESTAMP}

就是将#{}中的jdbcType属性设置成TIMESTAMP,这样在保存的时候就会将时分秒也包含进去。

如果你xml中使用了,为了防止意外,最好将相应的字段也修改:


2 数据库是字符串类型

2.1 传参是字符串

<if test="beginTime!=null and beginTime!=">
  AND tm.add_time&gt;=#{
          
   beginTime} 
</if> 
<if test="endTime!=null and endTime!=">
   AND tm.add_time &lt;=#{
          
   endTime} 
</if>

3DATE_FORMAT(date, format) 函数用法

宗旨:转换成同一类型进行比较 不关是传参是字符串还是时间,接受是字符串还是时间,都可以用DATE_FORMAT()

注意:进行时间段的查询时,在mapper文件中直接使用">","<“等关系运算符是无法解析的‘ 解决方法有两种, 一种是使用"&gt;","&lt;"来表示大于和小于关系,这样,在解析时,这些特殊字符会被转义成所匹配的运算符 另一种是使用”<![CDATA[ ]]>"来嵌套不需要转义的内容

正确的写法:

<if test="beginTime!=null and beginTime!=">
    <![CDATA[   and DATE_FORMAT(tr.add_time, %Y-%m-%d)>=  DATE_FORMAT(#{
          
   beginTime}, %Y-%m-%d)   ]]>
</if>
<if test="endTime!=null and endTime!=">
    <![CDATA[  and DATE_FORMAT(tr.add_time, %Y-%m-%d) <= DATE_FORMAT(#{
          
   endTime}, %Y-%m-%d)    ]]>
</if>
<if test="beginTime!=null and beginTime!=">
     and DATE_FORMAT(tr.add_time, %Y-%m-%d)&gt;=DATE_FORMAT(#{
          
   beginTime}, %Y-%m-%d)
</if>
<if test="endTime!=null and endTime!=">
   and DATE_FORMAT(tr.add_time, %Y-%m-%d)&lt;= DATE_FORMAT(#{
          
   endTime}, %Y-%m-%d)   
</if>

4 另外参考

5datetime和timestamp的区别

时间日期数据类型总概况 MySQL中有多种表示时间日期的数据类型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等。每一种数据类型都有存储的时间日期格式、以及取值范围,因此在使用时间日期数据类型的时候需要选取最佳的数据类型。

5时间处理(项目)

经验分享 程序员 微信小程序 职场和发展