mybatis-flex用户日志的相关操作

在使用 MyBatis-Flex 进行项目开发时,合理地处理用户日志相关操作对于系统的监控、管理和分析至关重要。本文将详细介绍如何在 MyBatis-Flex 项目中实现用户日志的关联查询功能,包括创建数据结构、编写业务逻辑以及进行测试等环节。

(一)创建关联数据结构

(1)创建 UserinfoHaveLogsVO
为了实现一个管理员对应多个操作日志的关联查询,首先创建了 UserHaveLogsVo 类。该类使用了 Lombok 的 @Data 注解来自动生成 getters 和 setters 方法,简化代码编写。
在这里插入图片描述
一个用户对应多个操作日志,所以需要用list列表来装userinfolog
具体代码:

package com.qzimp.fujiancuo.entity.vo;
import com.qzimp.fujiancuo.entity.UserinfoLog;
import lombok.Data;
import java.util.List;
@Data
public class UserinfoHaveLogsVo {
    private String loginName;
    private List<UserinfoLog> userinfoLogList;
}

(2)创建实体类Userinfo和UserinfoLog
Userinfo.java
在这里插入图片描述
具体代码:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("")
@Table(value = "tb_userinfo")
public class Userinfo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id(keyType = KeyType.Auto)
    @ApiModelProperty("")
    private Integer id;

    @ApiModelProperty("")
    private String loginName;

    @ApiModelProperty("")
    private String password;

    @ApiModelProperty("")
    private String email;

    @ApiModelProperty("")
    private String salt;

    @ApiModelProperty("")
    private String headerPic;

    @ApiModelProperty("")
    private String token;

}

UserinfoLog.java
在这里插入图片描述
具体代码:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("")
@Table(value = "tb_userinfo_log")
public class UserinfoLog implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id(keyType = KeyType.Auto)
    @ApiModelProperty("")
    private Integer id;

    @ApiModelProperty("")
    private String log;

    @ApiModelProperty("")
    private Integer userinfoId;

    @ApiModelProperty("")
    private LocalDateTime createTime;

}

两个实体类的数据库表

CREATE TABLE `tb_userinfo`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `login_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `salt` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `header_pic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `token` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `ak_login_name`(`login_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;


CREATE TABLE `tb_userinfo_log`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `log` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `userinfo_id` int(0) NULL DEFAULT NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

(二)实现业务逻辑

(1)controller层
在 UserinfoController类中创建了getUserHaveLogs方法,该方法接收一个LoginName参数,用于指定要查询的用户名。方法内部直接调用userinfoService的queryUserHaveLogs方法,并返回查询结果。
在这里插入图片描述
具体代码:

@GetMapping("getUserinfoHaveLogs")
    public UserinfoHaveLogsVo getUserinfoHaveLogs(String loginName){
        return  userinfoService.queryUserinfoHaveLogs(loginName);
    }

(2)service层
在 UserinfoService 接口中定义了 queryUserHaveLogs 方法,用于实现根据用户登录名查询相关用户日志信息的业务逻辑。
在这里插入图片描述
具体代码:

public interface UserinfoService extends IService<Userinfo> {
    /**
     * 通过账户获取用户实例
     * @return 用户实例
     */
    UserinfoHaveLogsVo queryUserinfoHaveLogs(String loginName);
    Userinfo queryUserinfoByName(String loginName);

}

在 UserinfoLogService接口中定义了 queryUserinfoLogs 方法获取与该用户相关的日志信息列表。
在这里插入图片描述
具体代码:

public interface UserinfoLogService extends IService<UserinfoLog> {
    List<UserinfoLog> queryUserinfoLogs(Integer userinfoId);
}

(3)service的实现方法(imp)
在 UserinfoServiceImpl 类中实现 queryUserHaveLogs 方法。首先,通过调用 queryUserinfoByName 方法,根据传入的 LoginName 获取用户信息。如果获取到的用户信息为空,则抛出一个自定义异常,表示用户账户不存在。
在这里插入图片描述
具体代码:

@Service
public class UserinfoServiceImpl extends ServiceImpl<UserinfoMapper, Userinfo> implements UserinfoService {
    @Autowired
    private  UserinfoMapper userinfoMapper;
    @Autowired
    private UserinfoLogService userinfoLogService;
    @Override
    public UserinfoHaveLogsVo queryUserinfoHaveLogs(String loginName) {
        //获取用户信息通过用户账号
        Userinfo userinfo=this.queryUserinfoByName(loginName);
        if (userinfo==null){
            throw  new ApiException(ResultCode.CUSTOM_ERROR,"用户信息账号不存在");
        }
        //通过用户编号获取日志信息
        List<UserinfoLog> logList=userinfoLogService.queryUserinfoLogs(userinfo.getId());
        //把所有的信息放在包装.setUserinfoName
        UserinfoHaveLogsVo userinfoHaveLogsVo=new UserinfoHaveLogsVo();
        userinfoHaveLogsVo.setLoginName(loginName);
        userinfoHaveLogsVo.setUserinfoLogList(logList);
        return userinfoHaveLogsVo;
    }
    @Override
    public Userinfo queryUserinfoByName(String loginName) {
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("login_name",loginName);
        return userinfoMapper.selectOneByQuery(queryWrapper);
    }

}

创建 UserinfoLogServiceImpl 类并实现了 queryUserinfoLogs 方法,根据用户编号查询对应的用户日志信息,并将结果封装为列表返回。
在这里插入图片描述
具体代码:

@Service
public class UserinfoLogServiceImpl extends ServiceImpl<UserinfoLogMapper, UserinfoLog> implements UserinfoLogService {
    @Autowired
    private UserinfoLogMapper userinfoLogMapper;
    @Override
    public List<UserinfoLog> queryUserinfoLogs(Integer userinfoId) {
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("userinfo_id",userinfoId);
        return userinfoLogMapper.selectListByQuery(queryWrapper);
    }
}

(三)进行测试

数据库要有数据
在这里插入图片描述
在这里插入图片描述
通过用户名查询该用户日志信息
在这里插入图片描述
当用户名不存在:
在这里插入图片描述

(四)总结

通过以上步骤,成功实现了 MyBatis-Flex 项目中的用户日志关联查询功能。这种功能在实际应用中可以帮助管理员或系统运维人员快速了解特定用户的操作历史,便于监控系统使用情况、排查问题以及进行数据分析等工作。在后续的开发中,可以进一步优化查询性能、完善日志记录内容以及增强系统的安全性和稳定性等方面的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值