在若依框架上开发查询用户累计登录天数功能

2024-08-28 23:36

本文主要是介绍在若依框架上开发查询用户累计登录天数功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

在现代Web应用开发中,用户体验至关重要。其中一个重要的方面就是用户的活跃度管理,其中累计登录天数是一个衡量用户活跃程度的重要指标。本文将详细介绍如何在一个基于若依框架的应用中实现查询用户累计登录天数的功能,并且确保查询条件符合当前登录用户的信息、登录类型相同(登录、登出)以及状态正常。

二、背景知识

在开始之前,我们需要了解一些基础知识:

  • 若依框架:这是一个基于Spring Boot的后台管理系统框架,它提供了丰富的组件和工具来快速搭建后端服务。
  • MyBatis Plus:这是MyBatis的一个扩展插件,简化了常见的CRUD操作,并提供了强大的Lambda表达式支持。
  • Spring Security:一个为Spring应用程序提供安全性的框架,用于认证和授权。
三、技术栈
  • 后端:Java + Spring Boot
  • 数据持久层:MyBatis Plus
  • 安全框架:Spring Security
四、实现步骤
  1. 定义登录日志实体类

    假设我们已经有了一个LoginLogDO实体类,它至少包含以下字段:

    public class LoginLogDO implements Serializable {private static final long serialVersionUID = 1L;private String username;private Integer type;private Integer status;private LocalDate loginDate; // 登录日期// getter 和 setter 方法
    }
    

    这里我们假设loginDate字段已经是一个LocalDate类型,这样可以直接用于日期比较,无需额外转换。

  2. 创建登录日志数据访问层

    在若依框架中,我们可以利用MyBatis Plus提供的BaseMapper接口来创建一个登录日志的数据访问层:

    @Mapper
    public interface LoginLogMapper extends BaseMapper<LoginLogDO> {// 自定义方法
    }
    
  3. 编写业务逻辑

    接下来,我们需要在服务层编写一个方法来计算累计登录天数。这个方法将利用MyBatis Plus的查询功能来获取所有符合条件的登录日志,并计算不重复的登录日期数量。

    @Service
    public class LoginLogService {@Autowiredprivate LoginLogMapper loginLogMapper;@Autowiredprivate SecurityHelper securityHelper;/*** 计算用户的累计登录天数* @return 累计登录天数*/public long calculateLoginDaysCount() {String currentUser = securityHelper.getUsername();// 构建查询条件Wrapper<LoginLogDO> countWrapper = Wrappers.<LoginLogDO>lambdaQuery().eq(LoginLogDO::getUsername, currentUser) // 当前登录用户.eq(LoginLogDO::getType, LoginConstants.TYPE_LOGIN) // 登录或登出类型.eq(LoginLogDO::getStatus, CommonYNEnum.Y.integerVal()); // 状态正常// 获取所有符合条件的日志记录List<LoginLogDO> loginLogs = loginLogMapper.selectList(countWrapper);// 提取并去重登录日期return loginLogs.stream().map(LoginLogDO::getLoginTime).map(date -> date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()).distinct().count();}
    }
    
  4. 添加安全辅助类

    SecurityHelper 是一个帮助类,用于获取当前登录的用户名。这里假设它有一个静态方法 getUsername() 来获取用户名。

    public class SecurityHelper {public static String getUsername() {Authentication authentication = SecurityContextHolder.getContext().getAuthentication();if (authentication == null || !authentication.isAuthenticated()) {throw new RuntimeException("未认证");}return authentication.getName();}
    }
    
  5. 定义常量和枚举

    • LoginConstants.TYPE_LOGINLoginConstants.TYPE_LOGOUT:分别代表登录和登出类型的常量值。
    • CommonYNEnum.Y.integerVal():表示“是”的枚举值,通常用来表示成功的状态。
    public class LoginConstants {public static final int TYPE_LOGIN = 1;public static final int TYPE_LOGOUT = 2;
    }public enum CommonYNEnum {Y(1), N(0);private int integerVal;CommonYNEnum(int integerVal) {this.integerVal = integerVal;}public int integerVal() {return integerVal;}
    }
    
  6. 测试功能

    在完成以上步骤后,可以通过单元测试或集成测试来验证该功能是否正确工作。

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class LoginLogServiceTest {@Autowiredprivate LoginLogService loginLogService;@Testpublic void testCalculateLoginDaysCount() {long loginDaysCount = loginLogService.calculateLoginDaysCount();System.out.println("累计登录天数: " + loginDaysCount);// 断言或其他验证}
    }
    
五、注意事项
  • 日期类型:确保 getLoginDate 方法返回的是 LocalDate 类型的对象,以便于后续的日期处理。如果返回的是 java.util.DateLocalDateTime,则需要调整日期转换的方式。
  • 异常处理:处理可能出现的异常情况,例如数据库查询失败等。可以使用 try-catch 块或者 @ExceptionHandler 注解来捕获并处理异常。
  • 性能优化:对于大数据量的系统,可以考虑使用索引来加速查询,或者采用分页查询的方式减少单次查询的数据量。
  • 安全性:确保只有经过身份验证的用户才能调用此服务方法,并且只能查询自己的登录记录。
六、总结

通过上述步骤,我们可以在基于若依框架的应用中实现一个简单的用户累计登录天数的查询功能。

这篇关于在若依框架上开发查询用户累计登录天数功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116209

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT