Mybatis jdbcType=DATE和jdbcType=TIMESTAMP的坑

如果实体类中的时间为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>
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<mapper namespace="com.cskaoyan.mapper.MarketOrderMapper"> <resultMap id="BaseResultMap" type="com.cskaoyan.bean.MarketOrder"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="user_id" jdbcType="INTEGER" property="userId" /> <result column="order_sn" jdbcType="VARCHAR" property="orderSn" /> <result column="order_status" jdbcType="SMALLINT" property="orderStatus" /> <result column="aftersale_status" jdbcType="SMALLINT" property="aftersaleStatus" /> <result column="consignee" jdbcType="VARCHAR" property="consignee" /> <result column="mobile" jdbcType="VARCHAR" property="mobile" /> <result column="address" jdbcType="VARCHAR" property="address" /> <result column="message" jdbcType="VARCHAR" property="message" /> <result column="goods_price" jdbcType="DECIMAL" property="goodsPrice" /> <result column="freight_price" jdbcType="DECIMAL" property="freightPrice" /> <result column="coupon_price" jdbcType="DECIMAL" property="couponPrice" /> <result column="integral_price" jdbcType="DECIMAL" property="integralPrice" /> <result column="groupon_price" jdbcType="DECIMAL" property="grouponPrice" /> <result column="order_price" jdbcType="DECIMAL" property="orderPrice" /> <result column="actual_price" jdbcType="DECIMAL" property="actualPrice" /> <result column="pay_id" jdbcType="VARCHAR" property="payId" /> <result column="pay_time" jdbcType="TIMESTAMP" property="payTime" /> <result column="ship_sn" jdbcType="VARCHAR" property="shipSn" /> <result column="ship_channel" jdbcType="VARCHAR" property="shipChannel" /> <result column="ship_time" jdbcType="TIMESTAMP" property="shipTime" /> <result column="refund_amount" jdbcType="DECIMAL" property="refundAmount" /> <result column="refund_type" jdbcType="VARCHAR" property="refundType" /> <result column="refund_content" jdbcType="VARCHAR" property="refundContent" /> <result column="refund_time" jdbcType="TIMESTAMP" property="refundTime" /> <result column="confirm_time" jdbcType="TIMESTAMP" property="confirmTime" /> <result column="comments" jdbcType="SMALLINT" property="comments" /> <result column="end_time" jdbcType="TIMESTAMP" property="endTime" /> <result column="add_time" jdbcType="TIMESTAMP" property="addTime" /> <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /> <result column="deleted" jdbcType="BIT" property="deleted" /> </resultMap>
05-30

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值