如果實體類中的時間爲Date
類型,mapper
中按時間查詢時不指定javaType
,Mybatis
會視參數爲Timestamp
類型,時間參數被格式化爲yyyy-MM-dd HH:mm:ss
,如下案例
表結構:online_date
類型是date
實體:時間段參數均是Date
類型,而非String
類型
public class UserOnline implements Serializable {
private Long userId;
// 在線時間,格式爲yyyy-MM-dd HH:mm:ss
private Date onlineTime;
// 在線日期,格式爲 yyyy-MM-dd
private Date onlineDate;
// 起始日期查詢條件,格式爲 yyyy-MM-dd
private Date onlineDateStart;
// 終止日期查詢條件,格式爲 yyyy-MM-dd
private Date onlineDateEnd;
}
定義用戶在線實體,所有時間類型都定義爲Date
類型
mapper
查詢條件
如果不指定onlineDateStart
的jdbcType=DATE
,那麼Mybatis
會默認jdbcType=TIMESTAMP
類型,查詢的結果不會是預期的結果。
注意:如果使用between
的話,指定了jdbcType=DATE
也無效,mybatis
會把數據當成Timestamp
類型
<where>
<if test="userId != null">
and user_id = #{userId}
</if>
<if test="onlineDateStart != null">
and online_date <![CDATA[ >= ]]> #{onlineDateStart,jdbcType=DATE}
</if>
<if test="onlineDateEnd != null">
and online_date <![CDATA[ <= ]]> #{onlineDateEnd,jdbcType=DATE}
</if>
</where>