有一个学生表,主键 id 是 int,对应的 java 里的数据实体里的 id 成员变量也是 int。
再这样一个 mybatis 接口
@Select("Select * from students")
List<Student> getAllStudents();
然后程序就能通过这个方法获得这个数组,就叫它studentList
吧。。
现在要实现响应前端按退学按钮,退学对应学生的功能。修改数据库是很简单的。但调整程序内存中的 studentList,删除对应的学生这件事上我有点困惑,想请问各位在实际项目中是如何做的?
=======以下内容是自己一些想法,以免伸手党之嫌=========
第一种:
前端返回的如果是 Student.id (在数据库和实体对象中均是 int ),也就是数据库学生表中的主键字段的值,由于之前可能已经有删除过(即之前的删除让数据库中的主键字段值不是连续的),故直接studentList.remove(id)
显然不妥。
那干脆,遍历 studentList,比较主键值,直到碰到对等的那个,然后用这个时候计数器i
的值来studentList.remove(i)
。
第二种:
不真正地在数据库中删除这条记录,而是添加一个enable
之类功能的字段,所谓的删除只是把 enable 设为 0 或者 false。
但这样的话,随着表渐渐增大,特别是其中被删掉的记录越来越多,程序就不得不带着大量无用数据在跑。同时返回给前端以供前端展示的时候,发过去的数据里这种无效的记录也很多。
第三种:
数据库里的删除仍然是真的删除,但不让前端返回 Student.id ,而是让前端在展示前根据 Student.id 排序,然后按下按钮提交上来的数据不是 student.id ,而是 student.index,也就是对应的 student 对象在数组的位置。这样借助数组的有序性,就能直接studentList.remove(index)
了。。
但这个方法的问题在于,网页展现的数据如果是旧的,在这个旧的网页上让一个同学退学前,别的管理员已经让一个同学退了学,那可能会导致这次退学退了个不相干的人,想想还有点牛逼。。。那这种问题要怎么解决呢。。
谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.