请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

sql 语句设计有问题

我觉得, 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. 不包括:出生年月、入学日期 之类的个人信息。


正在回答 回答被采纳积分+3

4回答

Geely 2017-06-24 15:08:17

代码里都是改成mysql内置函数了呀。。。

另外对于你们说不传的问题,调用的增量更新,有null判断的呀,就不会放到update语句里了。

0 回复 有任何疑惑可以回复我~
  • 提问者 Victor_Grayson #1
    当初想法有点傻,老师好好准备 2 期的课。
    回复 有任何疑惑可以回复我~ 2017-06-27 21:06:08
wangzhumo 2017-06-22 14:59:48

这两个都调用的是   mysql 内部函数赋值的  now() ,用户就算传了也是调用的 now()方法赋值的.

0 回复 有任何疑惑可以回复我~
EverL 2017-06-21 15:23:00

同意,既然可以模拟userId进行收获地址的横向越权,那么,createTime前端是不是也可以模拟输入呢?这样的话信息也是会被修改的?!!

0 回复 有任何疑惑可以回复我~
不知道叫啥好O 2017-06-07 21:36:30

更新有2个方法啊,一个是如果是null值就不更新。使用这个方法就表示你前端一定要传数据,不然你就加上

<if test="updateTime != null">
    update_time =now(),
</if>

这样的。。前面那个问题的话,我不知道为什么你说在service层处理会更好。

0 回复 有任何疑惑可以回复我~
  • 提问者 Victor_Grayson #1
    问题里回复了,评论有字数限制。
    回复 有任何疑惑可以回复我~ 2017-06-08 09:12:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信