您的位置:首页 > 数据库 > MySQL

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

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

这里是一个用户运动记录表,记录用户每天的运动时间,走的路程,消耗的能量和走的步数,前台是定时一分钟向后台发送一次用户的数据,在后天里进行数据保存,数据库中我们只需要根据用户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了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐