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

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

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

通过C#和RTSPClient实现简易音视频解码功能

《通过C#和RTSPClient实现简易音视频解码功能》在多媒体应用中,实时传输协议(RTSP)用于流媒体服务,特别是音视频监控系统,通过C#和RTSPClient库,可以轻松实现简易的音视... 目录前言正文关键特性解决方案实现步骤示例代码总结最后前言在多媒体应用中,实时传输协议(RTSP)用于流媒体服