mybatis-update更新某个字段,去掉逗号问题,更新时间条件判断,设置当前时间

方法一是用if test判断,方法二是更新哪些字段就写哪些字段

特别注意要对图片相关字段用if test判断

<update id="updateRiskPoint" parameterType="com.zte.claa.inficombo.apigwv1.app.framework.model.risk.RiskPoint" >
  update t_whppt_risk_point
  set pointname = #{pointname,jdbcType=VARCHAR},
    pointdescp = #{pointdescp,jdbcType=VARCHAR},
    addr = #{addr,jdbcType=VARCHAR},
    status = #{status,jdbcType=INTEGER},
    manager = #{manager,jdbcType=VARCHAR},
    orgid = #{orgid,jdbcType=VARCHAR},
    managelevel = #{managelevel,jdbcType=VARCHAR},
    resid = #{resid,jdbcType=VARCHAR},
    restype = #{restype,jdbcType=VARCHAR}, 
    <if test ="photourl != null and photourl != ''">  
      photourl = #{photourl,jdbcType=VARCHAR},
    </if>
    <if test ="phototype != null and phototype != ''"> 
      phototype = #{phototype,jdbcType=VARCHAR},
    </if>
    <if test ="photo != null "> 
      photo = #{photo,jdbcType=LONGVARBINARY},
    </if>
  risktypecode = #{risktypecode,jdbcType=VARCHAR} 
  where pointid = #{pointid,jdbcType=VARCHAR}
  and projectid = #{projectid,jdbcType=VARCHAR}
</update>

<update id="updateRiskPointMeasure" parameterType="com.zte.claa.inficombo.apigwv1.app.framework.model.risk.RiskPoint" >
  update t_whppt_risk_point
  set 
    riskreason = #{riskreason,jdbcType=VARCHAR},
    rishret = #{rishret,jdbcType=VARCHAR},
    accident = #{accident,jdbcType=VARCHAR},
    dealmethod = #{dealmethod,jdbcType=VARCHAR},    
    modtime = #{modtime,jdbcType=TIMESTAMP}    
  where pointid = #{pointid,jdbcType=VARCHAR}
  and projectid = #{projectid,jdbcType=VARCHAR}
</update>

-- 例如:只更新图片字段
<update id="updateRiskPointURL" parameterType="com.zte.claa.inficombo.app.model.appext.whppt.riskmanager.RiskPoint" >
  update t_whppt_risk_point
  set  
      photourl = #{photourl,jdbcType=VARCHAR}
  where pointid = #{pointid,jdbcType=VARCHAR}
  and projectid = #{projectid,jdbcType=VARCHAR}
</update>


--注意:photo photourl都为空,remark后面有个逗号,报错
--update t_agedcare_cookbook_define     set cname = ?,       ctype = ?,       descp = ?,       ctime = ?,       targetperson = ?,       projectid = ?,       remark = ?,                  where cid = ?
<update id="modifyCookbookDefineModel"  >
    update t_agedcare_cookbook_define
   set cname = #{c.cname,jdbcType=VARCHAR},
     ctype = #{c.ctype,jdbcType=VARCHAR},
     descp = #{c.descp,jdbcType=VARCHAR},
     ctime = #{c.ctime,jdbcType=VARCHAR},
     targetperson = #{c.targetperson,jdbcType=VARCHAR},
     projectid = #{c.projectid,jdbcType=VARCHAR},
     remark = #{c.remark,jdbcType=VARCHAR},
     <if test="c.photo != null ">
	    photo = #{c.photo, jdbcType=LONGVARBINARY},
     </if>
     <if test="c.photourl != null and c.photourl !=''">
	    photourl = #{c.photourl, jdbcType=VARCHAR}
     </if>
   where cid = #{c.cid,jdbcType=VARCHAR}
</update>

--改成如下即可:
<update id="modifyCookbookDefineModel"  >
    update t_agedcare_cookbook_define
   set cname = #{c.cname,jdbcType=VARCHAR},
      ctype = #{c.ctype,jdbcType=VARCHAR},
      descp = #{c.descp,jdbcType=VARCHAR},
      ctime = #{c.ctime,jdbcType=VARCHAR},
      targetperson = #{c.targetperson,jdbcType=VARCHAR},
      projectid = #{c.projectid,jdbcType=VARCHAR},
      <if test="c.photo != null ">
	    photo = #{c.photo, jdbcType=LONGVARBINARY},
     </if>
     <if test="c.photourl != null and c.photourl !=''">
	    photourl = #{c.photourl, jdbcType=VARCHAR},
     </if>
	   remark = #{c.remark,jdbcType=VARCHAR}
    where cid = #{c.cid,jdbcType=VARCHAR}
</update>

【mybatis】mybatis 中update 更新操作,null字段不更新,有值才更新 - Angel挤一挤 - 博客园

mybatis update并非所有字段需要更新的解决办法_Java小白的学习日常-CSDN博客_mybatis更新部分字段


但是上面方法还有问题,如果只更新两个字段呢,这两个字段都可能为空,这个逗号还是会存在

解决办法:使用<trim prefix="set" suffixOverrides=",">

<update id="updateTeamBoard">
        update team_board 
        <trim prefix="set" suffixOverrides=",">
            <if test ="teamboard.discoverType != null">
                team_board = #{teamboard.discoverType,jdbcType=INTEGER},
            </if>
            <if test ="teamboard.symbol != null and teamboard.symbol != ''">
                symbol = #{teamboard.symbol,jdbcType=VARCHAR}
            </if>
        </trim>
        where team_id = #{teamboard.teamId,jdbcType=VARCHAR}
        and board_id = #{teamboard.boardId,jdbcType=VARCHAR}
</update>

更新的时候时间条件判断:

@PostMapping("/savesatisfaction")
public ResponseEntity<Object> insertOrUpdateSatisfaction(@RequestBody SatisfactionExtra satisfaction){
        //增加判断,如果过了时间不给修改
        Instant instant = satisfaction.getActualEnded().toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        if(localDateTime.plusDays(3).isBefore(LocalDateTime.now())){
            return ResponseEntity.accepted().body(ErrorVo.build("1000","已经过了sprint截止时间,不可修改!"));
        }
        satisfactionService.UpdateSatisfaction(satisfaction);
        return ResponseEntity.ok("success");
}

设置每次更新都是当前时间:

<update id="UpdateSatisfaction" parameterType="com.bmw.dorms.modules.satisfaction.model.entity.Satisfaction">
    update satisfaction
    <trim prefix="set" suffixOverrides=",">
        <if test ="score != null">
            score = #{score,jdbcType=INTEGER},
        </if>
        <if test ="comment != null and comment != ''">
            comment = #{comment,jdbcType=VARCHAR},
        </if>
            subtime = now()
    </trim>
    where id = #{id,jdbcType=VARCHAR}
</update>

MyBatis 是一种非常流行的 Java 持久层框架,其优点在于其简单且易于使用。在 MyBatis 中,可以使用 update更新表格中的数据,同时可以通过条件来限定更新的数据范围。 在 MyBatis 中,使用 update 标签可以更新数据库中的数据,如下所示: ``` <update id="updateUser" parameterType="User"> update user set password=#{password}, nickname=#{nickname} where id=#{id} </update> ``` 在上面的代码中,updateUser 是更新数据的 id,其 parameterType 为 User,表示将更新一个 User 对象。在 update 标签内部,使用 update 语句来更新数据库,语句格式为: ``` update 表名 set 列名1=值1, 列名2=值2 where 条件; ``` 在这里,我们可以使用 where 子句来指定更新的数据范围。例如: ``` <update id="updateUser" parameterType="User"> update user set password=#{password}, nickname=#{nickname} where id=#{id} and userId=#{userId} </update> ``` 上面的代码中,我们使用 and 运算符来指定两个条件,只有同时满足这两个条件,才能更新表格中的数据。其中,id、password、nickname 等数据都是从 User 对象中获取的。 在 MyBatis 中,还可以使用 set 标签来更新指定的字段,例如: ``` <update id="updateUser" parameterType="User"> update user <set> <if test="password != null">password=#{password},</if> <if test="nickname != null">nickname=#{nickname},</if> </set> where id=#{id} </update> ``` 上面的代码中,我们使用 if 标签来判断 password 和 nickname 是否为空,如果不为空,则将其加入到更新语句中。在 set 标签内部,使用逗号来分割多个更新字段,必须以 where 关键字为结束。 总之,在 MyBatis 中,可以灵活使用 update 标签来更新指定表格中的数据。使用条件更新的方式,可以有针对性的对表格中的指定数据进行更新,方便实现数据的增删改查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值