批量更新,移动分组

最近做了一个用户收藏的分组功能,和QQ好友分组非常类似,在移动分组的时候,刚开始准备用fromOrder,groupId,toOrder,三个参数处理,我准备让他们移动一次分组,调用一次更新分组序号的接口,然后他们每调用一次,我们给toOrder之后的序号+1,但是由于没考虑到移动端移动一次之后第二次移动时用的是本地数据,所以导致我们后台数据已经修改了,但是移动端第二次移动时,数据还是之前的,经过讨论之后用了分组的批量更新,并且我们重新设计了接口,使用了groupIdList(当前用户的所有分组id,他们移动端拿到所有分组之后每次按移动后的顺序将IDList传给我们后端),然后利用了批量更新,将集合的下标存到数据库作为分组排序的序号.

移动批量更新的SQL语句,

以下是转载的批量插入和更新,

采用mybatis的批量插入方法

其实也是根据一个list 拼接成一个sql 
示例xml

    <insert id="batchInsertList">
        insert into test_user(u_name,create_date)
        values
        <foreach item="item" index="index" collection="userList" separator=",">
            (#{item.userName},SYSDATE())
        </foreach>
    </insert>

示例代码

        List<User> userList = new ArrayList<User>();

        for (int i = 1; i <= num; i++) {
            User user = new User();
            user.setUserName("a" + i);
            user.setCreateDate(new Date());
            userList.add(user);
        }
        userDao.batchInsertList(userList);

 

mybatis 批量更新

其实是利用了mysql的批量更新的语法 
示例xml

    <update id="batchUpdateList">
        update test_user
        <trim prefix="set" suffixOverrides=",">

            <trim prefix="u_name =case" suffix="end,">
                <foreach item="item" collection="userList">
                    when test_user.u_name = (#{item.userName})
                    then #{item.updateUserName}
                </foreach>
            </trim>

        </trim>
        where
        <foreach item="item" collection="userList" separator="or">
            (test_user.u_name = (#{item.userName}))
        </foreach>

    </update>

示例代码

        for (int i = 1; i <= num; i++) {
            User user = new User();
            user.setUserName("a" + i);
            user.setUpdateUserName("b" + i);
            userList.add(user);
        }
        userDao.batchUpdateList(userList);

 最后附上自己的批量更新

<update id="updateGroupOrderByGroupIds" parameterType="java.util.Map">
    update sv_ship_group
    <trim prefix="set" suffixOverrides=",">
    <trim prefix="group_order =case" suffix="end,">
        <foreach collection="groupIdList" item="item" index="index">
            when id = #{item} then  #{index}
        </foreach>
    </trim>
    </trim>
    where user_id = #{userId}
    and id in
    <foreach collection="groupIdList" item="item" index="index"
             separator="," open="(" close=")">
         #{item}
    </foreach>
</update>
public RestResponse moveGroup(UcUserInfo curUser,@RequestBody Map<String,Object> params){
    params.put("groupIdList",params.get("groupIdList"));
    params.put("userId",curUser.getId());
    boolean result = shipGroupService.updateGroupOrderByGroupIds(params);
    if(!result){
        return RestResponse.response(ResponseCode.NOTIFICATION.getCode(),"移动分组失败!");
    }
    return RestResponse.success();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值