【crud】update
在写一个专家人员的资质变更时,产品经理给到的需求是要在expert表中新创一个数据,然后根据code去判断这个人。变更时将旧数据的lsbz依旧为0,新数据为-1。然后到审核那边审核成功,将新数据变为0,旧数据为1。
其实不算难,记录一下我的磕磕碰碰过程。(虽然觉得其实挺无语的,之前数据库中一直用expert_id关联,现在又说用code。在机构变更的时候,也是。所以很多关联表可能都要改,不能去获取以前的值呀,,,)
记得最开始在nd公司的时候我直接把传过来的数值放到数据里直接更新,就会导致之前数据为空,只有更改的数据。这是我对update的最早记忆哈哈。
所以就记得用BeanUtils.copyProperties。这回就是先根据code,我比较懒,不想写sql,先new ,再setCode,后面调用框架findAll去get(0)。后面在写得过程中慢慢改过来了。①代码行数多,不优雅。②get(0)不一定是我想获取的最新的数据。后面改的代码是传入code,根据updateTime排序再limit1(后一段)。
好,这就获得最新值,也就是要变更的旧值。new一个新的,进行复制。再将传入的值复制过来,更新。还有一个审核表插入一条数据,设置审核中以及专家类型等状态。 到审核专家那个方法,直接根据传过来的objectId进行查找获得变更的新数据,修改lsbz为0。然后纠结了一下对于旧数据如何拿到并设置lsbz为-1,最终不打算偷懒,写了一个sql,传入code,根据updateTime排序再limit1。这个sql就是命运的转轮了,前面一段以及后面都用类似的sql进行处理了。
看起来大致没问题,实际中遇到①在copy时把id和updateTime都直接复制了,分两次发现这个问题。id复制了,那就只能update而不是save了,不能满足我新建一条expert数据的要求。后面考虑自己创一个id,用UUID.randomUUID().toString().repalce(''-'',''"),看起来还挺像模像样的,但是在他的框架saveOrUpdate方法中报错,看来不能如此。那么我只好还是setId(null)设为空,(竟然不会空指针)后面更新审核表取id,于是又用到了sql,不过区分于上面有个条件lsbz要为-1才是我查找的更新后的专家。
其他像更新updateTime(new Date())省略不谈,这样这个方法才在我的原型上扩充差不多了。
具体可能就是①获取什么值大胆写个sql从数据库获取。(参考我的审核方法获取旧值)②这个区分于之前,是要重新放入一条数据。所以对于id的处理(要设空),获取最近一条的数据(用sql)。
后面师父给了建议:① 两个逻辑之间换行 ② void不要return ③审核方法拒绝的时候再加一下把expert改为历史数据标识。(我作为喜欢偷懒的人,说他们也没改。但是说也没几行,加一下)