首页 > 数据库 >“依”本日记(三)数据库设计和创建注册功能

“依”本日记(三)数据库设计和创建注册功能

时间:2024-03-30 23:31:47浏览次数:32  
标签:comment usercenter 数据库 user 注册 import null com 日记

一、数据库设计

删除掉原型的user表

DROP TABLE user;

 新建数据库

添加需要的列,设置好主键,主要有以下几种 

-- auto-generated definition
create table user
(
    id           bigint auto_increment comment 'id',
    username     varchar(256)                        null comment '用户昵称',
    userAccount  varchar(256)                        null comment '账号',
    avatarUrl    varchar(1024)                       null comment '用户头像',
    gender       tinyint                             null comment '性别',
    userPassword varchar(512)                        not null comment '密码',
    phone        varchar(128)                        null comment '电话',
    email        varchar(512)                        null comment '邮箱',
    userStatus   int       default 0                 not null comment '用户状态',
    creamTime    timestamp default CURRENT_TIMESTAMP null comment '创建时间',
    updateTime   datetime  default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP null comment '更新时间',
    isDelete     tinyint   default 0                 not null comment '是否删除',
    primary key (id, userPassword)
)
    comment '用户表';

建表成功,输出结果:

二、后端-规整项目目录

新建controller文件夹,专门接受请求

新建service文件夹,编写业务逻辑

mapper文件夹是数据访问层,查询数据取数据,增删改查

model文件夹数据库对应的模型,封装类。

新建utils存放工具类,比如说加密,日期转换。

static主要放一下静态文件【删除】

templates放一些页面文件【删除】

三、后端-实现基本数据库操作

user对象和数据库的字段关联

一切从零开始,【删除】UserMapper类和SampleTest测试类

删代码,只保留最初的几行代码

安装MyBatisX工具包(代码生成器)

 数据库,对user表右键

使用MyBatisX插件生成对应文件

next,勾选部分选项

 将构建好的文件移到对应文件夹

生成的UserMapper.xml是与mapper文件夹里的UserMapper关联的

四、UserService创建一个测试类

鼠标放置文件名上,Alt键+Enter键,弹出

点击创建测试,直接确认,在test文件夹下生成了相同路径的test类

五、编写UserServiceTest

package com.yiping.usercenter.service;

import com.yiping.usercenter.model.domain.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.*;

/**
 * 用户服务测试
 *
 */
@SpringBootTest
public class UserServiceTest {

    @Resource
    private UserService userService;

    @Test
    public void testAddUser(){
        User user = new User();
        userService.save();
    }
}

安装插件

对着user对象,Alt+Enter键,弹出选项框,选择Generate all setter with default value

赋予一些属性 

    public void testAddUser(){
        User user = new User();
        user.setUserPassword("hezihaifeng");
        user.setUsername("123");
        user.setUserAccount("https://profile-avatar.csdnimg.cn/5e8901935731460ebd08374edcdffa3b_weixin_62081337.jpg!1");
        user.setAvatarUrl("123");
        user.setGender(0);
        user.setPhone("123");
        user.setEmail("456");
        boolean result = userService.save(user);
        System.out.println(user.getId());
        Assertions.assertTrue(result);//断言:执行结果是否是你的预期结果
    }

【提示】ctrl+p键可以提示用什么方法

六、执行UserServiceTest

【Error1】Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: @TableId can't more than one in Class: "com.yiping.usercenter.model.domain.User". at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:49)有一个关于 @TableId 注解使用不正确的问题。错误消息指出在 com.yiping.usercenter.model.domain.User 类中存在多个 @TableId 注解,而这是不允许的。@TableId 注解应该只在实体类的主键字段上使用一次。

找到包含TableId的地方将多余TableId注释(删除)

执行成功

七、后端-写登录逻辑 

引入依赖

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>

在userService里面写入用户服务的功能

package com.yiping.usercenter.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yiping.usercenter.model.domain.User;
import com.yiping.usercenter.service.UserService;
import com.yiping.usercenter.mapper.UserMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 用户服务实现类
* @author Holiyar
* @description 针对表【user(用户表)】的数据库操作Service实现
* @createDate 2024-03-28 22:53:45
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
    implements UserService{

    @Override
    public long userRegister(String userAccount, String userPassword, String checkPassword) {
        //1.校验
        if (StringUtils.isAnyBlank()) {
            return -1;
        }
        //2.校验账户
        if(userAccount.length()<4){
            return -1;
        }
        //3.校验密码
        if(userPassword.length()<8 || checkPassword.length() <8){
            return -1;
        }
        //4.账户不能重复
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userAccount", userAccount);
        long count = this.count(queryWrapper);
        if(count >0){
            return -1;
        }
        //5.账户不能包含特殊字符
        String validPattern  = "\\pP|\\PS|\\s+";
        Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
        if (!matcher.find()){
            return  -1;
        }
        //6.密码和校验密码相同
        if(!userPassword.equals(checkPassword)){
            return -1;
        }
    }
}

在UserServiceTest写一个测试

@Test
    void testDigest()throws NoSuchAlgorithmException{
        MessageDigest md5 = MessageDigest.getInstance("MDS");
        String newPassword= DigestUtils.md5DigestAsHex(("abcd"+"mypassword").getBytes());
        System.out.println(newPassword);
    }

 【Error2】java.security.NoSuchAlgorithmException: MDS MessageDigest not available这个错误提示表明在 UserCenterApplicationTests 类的 testDigest() 方法中尝试使用了一个不可用的消息摘要算法。具体来说,错误是由于尝试使用 "MDS" 算法而引起的。然而,实际上应该是 "MD5" 算法。要解决这个问题,你需要将消息摘要算法的名称从 "MDS" 修改为 "MD5"。

@Test
void testDigest() throws NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("MD5"); // 修改这里的算法名称
    byte[] bytes = md5.digest("abcd".getBytes(StandardCharsets.UTF_8));
    String result = new String(bytes);
    System.out.println(result);
}
执行成功

标签:comment,usercenter,数据库,user,注册,import,null,com,日记
From: https://blog.csdn.net/weixin_62081337/article/details/137093899

相关文章

  • Leetcode算法训练日记 | day11
    一、有效的括号1.题目Leetcode:第20题给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。3.每个右括号都有一个对应的相同类型的左括号。示例1:输入:s="()"......
  • Leetcode算法训练日记 | day10
    一、用栈实现队列1.题目Leetcode:第232题请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的元素......
  • 【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?
    目录缓存穿透缓存穿透解决办法缓存击穿击穿解决办法?缓存穿透和缓存击穿的区别?缓存雪崩雪崩解决办法?如何确保缓存和数据库数据的一致性?常见的缓存更新策略?缓存穿透定义:缓存穿透说简单点就是大量请求的key是不合理的,根本不存在于缓存中,也不存在于数据库中。这......
  • 基于SpringBoot的“游戏分享网站”的设计与实现(源码+数据库+文档+PPT)
    基于SpringBoot的“游戏分享网站”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示系统总体结构图网站首页界面图用户注册界面图游戏文章界面图交流论坛界面图个人中心界面图后......
  • MogDB/OpenGauss数据库中通过参数控制抓取慢sql
    MogDB/OpenGauss数据库中通过参数控制抓取慢sql本文出处:https://www.modb.pro/db/221556mogdb数据库中可以通过打开相应的参数抓取慢sql,该参数为log_min_duratuion_statement。log_min_duration_statement参数说明:当某条语句的持续时间大于或者等于特定的毫秒数时,log_min......
  • yii2数据库访问对象
    yii2数据库访问对象配置数据库链接$db=newyii\db\Connection(['dsn'=>'mysql:host=localhost;dbname=xhj','username'=>'root','password'=>'123456',......
  • SQL Server 附加数据库提示5120错误
    SQLServer附加数据库提示5120错误怎么样是不是跟你的错误是一样的,心里是不是有点小激动?T_T终于有办法了!!!! 第一步先关掉你的SQLserver然后在菜单上找找到SQLSERVER右键选择“以管理员运行” 第二步给你的数据库文件所在文件夹给上“读取,写入”的权限。在附加数据库......
  • Applescript实现无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测完
    一、实现iMessage蓝号数据筛选的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写脚......
  • openGauss 数据库认证机制
    数据库认证机制可获得性本特性自openGauss1.1.0版本开始引入。特性简介提供基于客户端/服务端(C/S)模式的客户端连接认证机制。客户价值加密认证过程中采用单向Hash不可逆加密算法PBKDF2,有效防止彩虹攻击。特性描述openGauss采用基本的客户端连接认证机制,客户端发起连接请......
  • openGauss 数据库指标采集-预测与异常监控
    数据库指标采集、预测与异常监控可获得性本特性自openGauss1.1.0版本开始引入。特性简介本特性是openGauss集成的、可以用于数据库指标采集、预测以及异常监控与诊断的AI工具,是DBMind套间中的一个组件。当前通过兼容Prometheus平台来采集数据库系统的指标,提供Prometheusexpo......