前端表单上下移动接口实现

要求:项目中遇到前端页面读取完数据后,需要对排序进行上下移动

思路:让前端传入两个参数,一个是状态,0前进,1后退,再把当前的sort值发送到后台,后台根据当前的状态值,判断前进还是后退;根据传入的sort去查找当前这条记录,对sort进行+1或者-1的更新操作,再把数据通过 ORDER BY 函数进行排序发送给前端页面

实现:
    据传入的sort去查找当前这条记录,对sort进行+1或者-1操作的Mybatis XML写法

    这是上移更新操作:通过子查询的方法,通过sort_order字段找到当前数据,对数据的sort_order进行-1操作

<update id="sortUp" parameterType="java.util.HashMap">
  UPDATE md_drainage_basin
  SET sort_order = CASE sort_order
  WHEN #{sortOrder} THEN
  sort_order - 1
  ELSE
  sort_order + 1
  END
  WHERE
  sort_order IN (
  SELECT * FROM (
  SELECT sort_order FROM md_drainage_basin t1 WHERE t1.sort_order = (
  SELECT sort_order FROM md_drainage_basin
  WHERE sort_order = #{sortOrder}
   ) - 1 OR t1.sort_order = #{sortOrder}
     ) ids
    )
</update>

    这是下移操作: 通过子查询的方法,通过sort_order字段找到当前数据,对数据的sort_order进行+1操作

<update id="sortDown" parameterType="java.util.HashMap">
  UPDATE md_drainage_basin
  SET sort_order = CASE sort_order
  WHEN #{sortOrder} THEN
  sort_order + 1
  ELSE
  sort_order - 1
  END
  WHERE sort_order IN (
  SELECT * FROM (
  SELECT sort_order FROM md_drainage_basin t1
  WHERE t1.sort_order = (
  SELECT sort_order FROM md_drainage_basin
  WHERE sort_order = #{sortOrder} ) + 1
  OR t1.sort_order = #{sortOrder}
  ) ids
    )
</update>

    而后将两个方法写入对应的Mapper接口中,再业务逻辑处理层进行操作,判断前端传入的状态码
public Result sortOrder(Integer page, Integer size, @RequestParam Integer sortOrder,@RequestParam Integer status) {
    HashMap<String,Object> map = new HashMap<>();
    map.put("sortOrder",sortOrder);
    switch (status){
        case 0:
            if (sortOrder != 1){
                mdWaterSystemMapper.sortUp(map);
            }
            break;
        case 1:
            List<MdWaterSystem> listSize = mdWaterSystemMapper.findBy();
            if (sortOrder <= listSize.size()){
                mdWaterSystemMapper.sortDown(map);
            }
            break;
    }
    PageHelper.startPage(page, size);
    List<MdWaterSystem> list = mdWaterSystemMapper.findBy();
    PageInfo pageInfo = new PageInfo(list);
    return ResponseMsgUtil.success(pageInfo);
}
    两个 case中都加了if判断,用意是:上移时,若序号等于1,是头一位了就不进行上移操作;下移时,查询出所有的条目数字,若到达最大值最后一个了,到底了就不进行下移操作,做完判断后,将进行排序过的ORDER BY查询所有的进行返回给前端


这里有一点要注意:看需求返回,若需要移动完直接返回所有的话,用以上这种方法
List<MdWaterSystem> list = mdWaterSystemMapper.findBy();
  若条件查询后展示数据还是条件查询后的语句,则需要换一种思路: 分出两种查询结果,一种是返回所有,一种是返回条件查询结果,根据判断是否被查询过而来选择哪一种结果返回



同样的方法,不同的返回结果,所以要再设定一个接口方法,把sortOrder方法放进去,返回两种结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值