SpringBoot入门-批量操作优化

批量选择处理是很多项目都会用到的常用功能。像人员角色选择,人员部门选择,人员门禁选择等。下图所示,左边是门禁列表,右边是人员列表,选择一个门禁,然后批量选择人员,选中的人员可以出入该门禁。

对于这个功能一般怎么实现呢? 

先看数据库设计,由于是多对多的结构,需要建张中间表

 接下去删除door_id对应用户

delete from user_door where door_id = ?

再批量添加记录

insert into user_door(?,?,?)

如上图选择了两个人,所以这条sql要执行两次。

相信大部分人对于该功能的实现是这样的,简单易懂,对于很多场景来说确实有效。但这样设计有什么问题呢?

我有一次去一家大公司参与项目的开发,他们有一千多号人,加一个人到门禁的操作要一分钟,因为要执行一千多次插入操作,我们知道插入操作是很慢的,特别是加索引的情况下,需要重建索引就更慢了。

如果我们再加个需求,给新增或者删除的人员发站内信告诉他权限的变更,那上面的设计就实现不了了,有没有更好的方案呢?

这个时候我们可以从数学中找点思路,大家应该都学习过集合,看下图

 A集合就是新的用户id,B集合就是老的用户id,那新增用户就是A与B的差集(横线部分),删除用户就是B与A的差集(竖线部分),AB的交集就是不变区域。那用代码怎么实现呢?

//为了清晰我用名字代替id
//newUsers是当前选中的人员
List<String> newUsers = Arrays.asList("张三", "王五");
//oldUsers是存在数据库中的老数据
List<String> oldUsers = Arrays.asList("张三", "李四");
//计算新增人员
List<String> addUsers = new ArrayList<>(newUsers);
addUsers.removeAll(oldUsers);
//计算删除人员
List<String> removeUsers = new ArrayList<>(oldUsers);
removeUsers.removeAll(newUsers);
System.out.println(addUsers); //王五老的数据没有,所以是新增的
System.out.println(removeUsers); //李四没被选中,应该被删除

输出结果:

与预期一致,现在得到了新增用户和删除用户,可以分别发站内信通知了,同时插入新增用户,删除对应删除用户就行了,比如今天新来一个同事,对应门禁新增一个用户,只需要插入一条记录就可以,而不需要重新插入上千条记录,效率特别高。 

Springboot CAS-Client 是一个基于Springboot框架集成CAS(Central Authentication Service)的客户端。 CAS是一种单点登录(Single Sign-On)协议,它允许用户在一次登录后就能够访问多个应用,而无需重新认证。 Springboot CAS-Client 的作用是充当CAS服务端和应用系统之间的中间件,它负责向CAS服务端发送认证请求,并根据认证结果来管理用户的登录状态。 为了集成CAS,我们首先需要在Springboot项目中引入相应的依赖,例如spring-boot-starter-web和spring-boot-starter-security。接着,我们需要配置CAS服务端的地址信息,包括CAS服务端的登录URL、登出URL以及验证票据的URL等。 在Springboot CAS-Client中,我们也可以自定义一些过滤器和拦截器来实现相关的功能。例如,我们可以编写一个CAS认证过滤器来拦截所有的请求,并判断用户的登录状态。如果用户未登录,则跳转到CAS服务端进行认证;如果用户已登录,则直接放行请求。此外,我们还可以编写一个CAS登出拦截器来处理用户的登出请求,并在登出完成后将用户重定向到指定的页面。 总的来说,Springboot CAS-Client 提供了一个简洁、灵活的方式来集成CAS协议,使得我们的Springboot应用能够享受到单点登录带来的便利。通过它,我们可以轻松地实现用户认证、登录状态管理以及注销等功能,提升用户体验并提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值