我觉得, sql 设计得不妥当。 CartMapper 为例:
<update id="updateByPrimaryKeySelective" parameterType="com.dmall.pojo.Cart"> update dmall_cart <set> ... // 这两句有问题 <if test="createTime != null">create_time = #{createTime},</if> <if test="updateTime != null">update_time = #{updateTime}</if> </set> where id = #{id} </update>
createTime 这类时间数据,交给系统处理,也就是 mysql 或 Service 层会更好。
前端传时间值,1、格式问题;2 、createTime 这类时间生成后,原则上是不能改的,会造成数据模糊,数据分析可能出问题。另外,还有个小 bug, update 语句都有,CategoryMapper 为例:
<update id="updateByPrimaryKey" parameterType="com.mmall.pojo.Category"> update mmall_category set ... create_time = #{createTime,jdbcType=TIMESTAMP}, // 这句有问题 update_time = now() where id = #{id} </update>
如果前端不传,create_time 会重置为 null,因为 createTime、updateTime 是 null。
给 1 楼的回复:
我上面的表达可能不够清晰。最精简的是,给不给前端修改时间的权限?
像 create_time、update_time 之类的时间,我的想法是:修改、生成只能交给系统,也就是 mysql 或者 service 获取的系统时间。前端不需要传时间值。
假设有一种情况,商城搞活动,注册两年的会员 8 折优惠。这时候,我修改密码,把 createTime 加到 user 信息里,传到数据库的时候,create_time 这个值就被更新了。或者,时间格式格式不对,插入错误。问题来了,user 的注册日期,和其它数据就对不上。没接触过数据分析,但这个变量改了,会不会影响分析结果?排除数据分析的因素,这也相当于 bug。
至于,service 层的 DateTimeUtils,还是 mysql 的 now(),其实是个选择问题。本质的问题,是把时间交给系统处理,还是开放时间修改权限。
p.s. 不包括:出生年月、入学日期 之类的个人信息。