Mybatis jdbcType=DATE和jdbcType=TIMESTAMP的坑

如果實體類中的時間爲Date類型,mapper中按時間查詢時不指定javaTypeMybatis會視參數爲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查詢條件

如果不指定onlineDateStartjdbcType=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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章