使用Java代码实现列表排序功能.pdf

使用Java代码实现列表排序功能.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
使用Java代码实现列表排序功能--第1页 使⽤Java代码实现列表排序功能 说起排序,应该是每个程序员的最基本功底了,⾄少冒泡排序都会吧,但今天讲的和那些排序算法没多⼤关系。主要是最近做⼀个客服系统,需要 对常见问题进⾏排序,要求可以拖拽修改顺序,这种功能确实烂⼤街了啊,像这样⼦输⼊数字改变排序的: showdoc排序.png 还有像这样拖拽改变顺序的: 拖拽排序.png ,事实上常见问题就是像这样的: 常见问题.png 在后台看上去⼤概是这样: 使用Java代码实现列表排序功能--第1页 使用Java代码实现列表排序功能--第2页 常见问题后台.png 需求是这样的: 需求.png 拿到需求⽂档的那⼀刻我脑海⾥马上冒出了上家公司拖拽排序**规则的样式,⼼⾥也⼤概有谱了,其实很简单,不管你怎么拖拽,我只管拿到全部 的guid/id的List(按顺序排好的)然后全量去修改排序的这个字段就好了 ,但也带来了⼏个问题:第⼀:⽆法避免的⾼并发情况下出现的排序混乱 风险,当然幸好⼀般这种需求都不会涉及到⾼并发场景,更何况我现在只想着这么实现这个功能先,不过在同事的指导下,有了使⽤SQL完成该功 能的⽅法,这个后⾯再讲;第⼆:全量更新带来的性能问题,相信很多⼈知道怎么批量插⼊,但不知道批量修改吧,像我上家公司就很蠢的⽤for 循环⼀遍⼀遍⽤id对应去更新,真的很蠢,就像我在《做程序员到现在踩过的坑》中讲到的:别在for循环⾥⼀遍⼀遍查数据库...原因当然很简单, 数据量⼀旦很多,数据库连接就会爆掉的,想象⼀下,你有⼏百万数据需要更新就去执⾏⼏百万条SQL,建⽴⼏百万条数据库连接,那场景太美我 不敢想,所以能⽤⼀条SQL解决的就⽤⼀条SQL解决,能只建⽴⼀次数据库连接,就不要重复建⽴⽆关紧要的数据库连接,当然慢SQL不在此列。 这⾥贴⼀下批量插⼊和批量更新的SQL,希望有借鉴意义: image.png 使用Java代码实现列表排序功能--第2页 使用Java代码实现列表排序功能--第3页 好了,讲了这么多废话,讲讲我的解决思路吧,⾸先我不要前端排好的序列,⽽是只要修改的那条常见问题和要改到哪个位置,然后代码逻辑如 下: 排序.png 看代码,思路应该很清晰了吧?就是把要改变位置的那条记录从数据库查出来的列表⾥先排除出去,然后,将剩下的队列以⽬标位置分为两个部分 将要改变位置的那条记录插⼊⽬标位置组成全新的队列,重新⽣成序号然后⽤⼀条SQL批量更新序号字段,新增的话就是这样: 新增.png 使用Java代码实现列表排序功能--第3页 使用Java代码实现列表排序功能--第4页 修改就是直接组对象调sort⽅法就可以了,删除我是先删除,然后全部查出来重新排序修改就可以了,像这样: 删除.png 接下来将考虑使⽤同事提到的利⽤SQL原⼦性⽅法来实现同样的功能: UPDATE table set LEVEL = ( CASE WHEN (LEVEL>3 AND LEVEL<=6) THEN LEVEL-1 WHEN LEVEL=3 THEN 6 ELSE LEVEL END ) UPDATE table set LEVEL = ( CASE WHEN (LEVEL<6 AND LEVEL>=3) THEN LEVEL+1 WHEN LEVEL=6 THEN 3 ELSE LEVEL END ) 使用Java代码实现列表排序功能--第4页

文档评论(0)

1636091513dfe9a + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

认证主体赵**

1亿VIP精品文档

相关文档

相关课程推荐