关于MYSQL进行insert操作时,存在则更新不存在则插入的解决办法

项目开发中经常会遇到数据频发插入操作且需要进行判断,这样会业务层多一次判断的操作,多请求一次数据库,造成性能问题,所以采用以下办法解决了这个令人蓝瘦的问题。。。

这里是一个用户运动记录表,记录用户每天的运动时间,走的路程,消耗的能量和走的步数,前台是定时一分钟向后台发送一次用户的数据,在后天里进行数据保存,数据库中我们只需要根据用户ID和时间来多次更新这些数据就可以保存当前用户一天的数据

![](https://img-blog.csdn.net/20180117201215389?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3lzdGVtX291dF9wcmludF9Cb3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
假如第一次传来用户的数据,我们只需要判断当前用户ID和当天的时间去数据库查询有没有这个字段,有了就进行更新操作,没有进新增一条数据记录用户今天的数据。
记得在这个RecordStep实体类中加一个count字段(int类型),mapper如下:
<insert id="insertStep" useGeneratedKeys="true" keyProperty="id" parameterType="RecordStep">
        <selectKey keyProperty="count" resultType="int" order="BEFORE">
            select count(*)  as count from tj_record_step where  CREATEBY=#{createBy} and USER_ID=#{userId}
      </selectKey>
      <!--如果不存在创建  -->
          <if test="count==0">
            INSERT INTO 
            tj_record_step
        (
            <include refid="SRecordColumns" />
        )VALUES(
            #{userId},
            #{actualTime},
            #{actualEnergy},
            #{actualMileage},
            #{actualStep},
            NOW(),
            NOW()
        )
        </if>
        <!--如果存在,更新时间  -->
        <if test="count > 0">
            UPDATE tj_record_step SET UPDATEBY=NOW() 
            <if test="actualTime !=null and actualTime !=''">
                ,ACTUAL_TIME=#{actualTime}
            </if>
            <if test="actualEnergy !=null and actualEnergy !=''">
                ,ACTUAL_ENERGY=#{actualEnergy}
            </if>
            <if test="actualMileage !=null and actualMileage !=''">
                ,ACTUAL_MILEAGE=#{actualMileage}
            </if>
            <if test="actualStep !=null and actualStep !=''">
                ,ACTUAL_STEP=#{actualStep}
            </if>
            WHERE  USER_ID=#{userId}
        </if>
    </insert>

这样就OK了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值