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

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

相关文章

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)