用户中心(中)

文章目录

    • 数据库设计
      • 用户表
      • 建表
    • 登录/注册
      • 后端
        • 一、规整项目目录
        • 二、实现基本数据库操作
          • 自动生成器的使用
          • **(1) 模型 user 对象自动生成**
          • **(2) 测试一下**
        • 三、注册逻辑
        • 四、测试

数据库设计

1.什么是数据库?存数据的
2.数据库里有什么?数据表(理解为excel表格)
3.java操作数据库,代替人工
4.什么是设计数据库表?
5.有哪些表(模型)?表中有哪些字段?字段的类型?数据库字段添加索引?
6.表与表之间的关联
7.性别是否需要加索引?

用户表

字段说明类型
id主键bigint
userName昵称varchar
userAccount登录账号varchar
avatarUrl头像varchar
gender性别tinyint
userPassword密码varchar
phone电话varchar
email邮箱varchar
userStatus用户状态int
createTime创建时间datetime
updateTime更新时间datetime
isDelete是否删除(逻辑删除)tinyint
userRole用户角色 0-普通用户 1-管理员int

isValidisDelete是否重复呢?
前者是与业务有关系的,比如是否已经通过验证、是否被管理员封号、是否可以正常使用系统,后者这个字段和业务是没有任何关系的,表示逻辑删除

createTimeupdateTimeisDelete基本是所有数据库设计中都要有的,对于数据管理、审计跟踪、逻辑删除这些操作的至关重要

要不要给这个字段索引?
是否要加,取决于是否要根据这个字段搜素信息
性别是否要加索引?
一般都不需要

  1. 基数小,种类不多,区分度太小
  2. 查询模式,很少基于性别单独进行

建表

新版IDEA建表时,不同页面
image.png
完整SQL语句

create table user
(id           bigint auto_increment primary key,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 '密码',email        varchar(512)                       null comment '邮箱',userStatus   int      default 0                 null comment '状态 0-正常',phone        varchar(128)                       null comment '电话',createTime   datetime default CURRENT_TIMESTAMP null comment '创建时间',updateTime   datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',isDelete     tinyint  default 0                 not null comment '是否删除'
)comment '用户表';

登录/注册

推荐先做后端,因为更好思考逻辑,理清逻辑后更好写前端

后端

一、规整项目目录

新建包(目录) controller、service、utils

一些目录文件说明

| 目录/文件

| 说明

|
| — | — |
| | 就是请求层或者叫控制层。然后这个目录里的所有的文件专门用来接收请求,不做任何的业务处理,只去接收请求

|
| | 专门用来编写业务逻辑,那比如说登录注册这些就是业务逻辑

|
| | 一个数据访问层,就是这一层的文件,就是专门用于从数据库中去查询数据,去取数据、增删改查之类的

|
| | 定义了数据库的一些和数据库相对应的模型,或者用到的一些封装类

|
| | 存放一些东西,比如说加密、格式转换、日期转换等等。(就是和我们业务关系不太大的,为了节省我们的操作)

|
| | 一般写前后端不分离的项目,在static放一些静态文件(没用删掉)

|
| | 一般写前后端不分离的项目,放页面模板文件(没用删掉) |

二、实现基本数据库操作
自动生成器的使用

MyBatisX 插件,自动根据数据库生成 domain 实体对象、mapper(操作数据库的对象)、mapper.xml(定义了 mapper对象和数据库的关联,可以在里面自己写 SQL)、service(包含常用的增删改查)、serviceImpl(具体实现 service)

(1) 模型 user 对象自动生成

image.png

(2) 测试一下

image.png
image.png

这里可以Alt + Enter user 使用下面这个插件,即可自动生成set 相关方法,再自己随便设置参数即可

image.png
image.png
image.png

进行测试时会报如下错误
mybatis-plus默认会将驼峰转换成下划线,所以就出现 在“字段列表”中出现未知列“user_account”,在application.yml关闭默认转换

image.png

在文件中添加如下内容

mybatis-plus:configuration:map-underscore-to-camel-case: false

再次运行即可

三、注册逻辑
  1. 用户在前端输入账户和密码、以及校验码
  2. 校验用户的账户、密码、校验密码是否符合要求
  3. 非空
  4. 账户不小于 4 位
  5. 密码不小于 8 位
  6. 账户不能重复
  7. 账户不包含特殊字符
  8. 校验密码和密码相同
  9. 对密码进行加密(密码不能直接明文存储到数据库中)
  10. 向数据库插入用户数据

UserService

/*** 用户注册* @param userAccount 用户账户* @param userPassword 用户密码* @param checkPassword 校验密码* @return 新用户id*/
long userRegister(String userAccount, String userPassword, String checkPassword);

UserServiceImpl

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic long userRegister(String userAccount, String userPassword, String checkPassword) {//1.校验if(StringUtils.isAnyBlank(userAccount,userPassword,checkPassword)){// TODOreturn -1;}if(userAccount.length()<4){return -1;}if(userPassword.length()<8||checkPassword.length()<8){return -1;}//账户不能包含特殊字符String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\\\\\[\\\\\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?\\s]";Matcher matcher= Pattern.compile(validPattern).matcher(userAccount);if(!matcher.find()){return -1;}//密码和校验密码相同if(!userPassword.equals(checkPassword)){return -1;}//用户不能重复//这里有个查询数据库的操作,如果账户包含了特殊字符就不用查了,因此把这个操作放到最后节省了一点性能QueryWrapper<User> queryWrapper=new QueryWrapper<>();queryWrapper.eq("userAccount",userAccount);long count=userMapper.selectCount(queryWrapper);if(count>0){return -1;}//2.加密final String SALT="yupi";String encryptPassword= DigestUtils.md5DigestAsHex((SALT+userPassword).getBytes());//3.插入数据User user=new User();user.setUserAccount(userAccount);user.setUserPassword(encryptPassword);boolean saveResult=this.save(user);if(!saveResult){return -1;}return user.getId();}
}

引入依赖,这是一个工具类库
在 Maven 中央仓库 搜索 Apache Commons Lang,我们选择了 3.12.0 版本

<!-- 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>
//1.校验
if(userAccount==null||userPassword==null||checkPassword==null){ 
}
// 导入了工具类上面的代码就可以换成下面的
//1.校验
if(StringUtils.isAnyBlank(userAccount,userPassword,checkPassword)){
}
四、测试
@Testvoid userRegister() {//  a. 非空String userAccount = "yupi";String userPassword = "";String checkPassword = "12345678";long result = userService.userRegister(userAccount,userPassword,checkPassword);Assertions.assertEquals(-1, result);//  b. 账户不小于 4 位userAccount = "yu";userPassword = "12345678";result = userService.userRegister(userAccount,userPassword,checkPassword);Assertions.assertEquals(-1, result);//  c. 密码不小于 8 位userAccount = "yupi";userPassword = "123";result = userService.userRegister(userAccount,userPassword,checkPassword);Assertions.assertEquals(-1, result);//  d. 账户不能重复userAccount = "123456";userPassword = "12345678";result = userService.userRegister(userAccount,userPassword,checkPassword);Assertions.assertEquals(-1, result);//  e. 账户不包含特殊字符userAccount = "yu pi";result = userService.userRegister(userAccount,userPassword,checkPassword);Assertions.assertEquals(-1, result);//  f. 校验密码和密码相同userAccount = "yupi";userPassword = "12345678";checkPassword = "12345678";result = userService.userRegister(userAccount,userPassword,checkPassword);Assertions.assertTrue(result > 0);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/659937.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ST的STM32F407ZGT6嵌入式uCOS-III V3.08 操作系统工程实验

1.基于的开发板 2.原理图截图: 3.主控芯片框图与性能特点: High-performance foundation line, Arm Cortex-M4 core with DSP and FPU, 1 Mbyte of Flash memory, 168 MHz CPU, ART Accelerator, Ethernet, FSMC The STM32F405xx and STM32F407xx family is based on the high…

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景&#xff0c;某地出现突发事件&#xff0c;当地村委会、负责人等在积极研究和搜集解决该事件的解决方案&#xff0c;你也决定参与其中&#xff0c;提交提案&#xff0c;建议一些解决方法。为了和其他村民的提案做区分&#xff0c;你的…

Transformer实战 单词预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 一、定义模型 from tempfile import Tempor…

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层 问题场景&#xff1a; 1.浏览官网示例的时候图层看到大量线数据合并渲染的示例 2.矢量数据较大量级的时候&#xff0c;这种时候怎么在config.json文件中尝试配置呢&#x…

大数据运维之数据质量管理

第1章 数据质量管理概述 1.1 数据质量管理定义 数据质量管理&#xff08;Data Quality Management&#xff09;&#xff0c;是指对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的各类数据质量问题&#xff0c;进行识别、度量、监控、预警等一…

【好书推荐8】《智能供应链:预测算法理论与实战》

【好书推荐8】《智能供应链&#xff1a;预测算法理论与实战》 写在最前面编辑推荐内容简介作者简介目录精彩书摘前言/序言我为什么要写这本书这本书能带给你什么 致谢 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴…

ARP学习及断网攻击

1.什么是ARP ARP&#xff08;Address Resolution Protocol&#xff09;是一种用于在IPv4网络中将IP地址映射到MAC地址的协议。在计算机网络中&#xff0c;每个网络接口都有一个唯一的MAC地址&#xff08;Media Access Control address&#xff09;&#xff0c;用于识别网络设备…

tomcat部署

1.客户端和服务器端的交互过程 客户端发送请求给服务器 由服务器中的服务器软件拦截请求 根据请求调动相应的Java业务逻辑执行相关的处理 我们前面知道Java代码的运行势必提前将其装载在JVM上 而服务器软件一般都是由Java代码编写 所以两者都要装载在JVM上 而Java业务逻辑装载…

个人学习资源整理

文章目录 视频相关stl源码讲解相关 网站相关CPP网站 视频相关 stl源码讲解相关 跳转 网站相关 CPP网站 https://cplusplus.com/ https://gcc.gnu.org/

C语言实验-函数与模块化程序设计

一&#xff1a; 编写函数fun&#xff0c;其功能是&#xff1a;输入一个正整数&#xff0c;将其每一位上为偶数的数取出重新构成一个新数并输出。主函数负责输入输出&#xff0c;如输入87653142&#xff0c;则输出8642。&#xff08;main函数->fun函数&#xff09; #define _…

解决RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED

下图说明在一瞬间我的GPU就被占满了 我的模型在训练过程中遇到了 CUDA 相关的错误&#xff0c;这是由于 GPU资源问题或内存不足导致的。这类错误有时候也可能是由于某些硬件兼容性问题或驱动程序问题引起的。 为了解决这个问题&#xff0c;可以尝试以下几个解决方案&#xff1a…

实验14 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。【参考课本 例1 】 三、源代码以及执行结果截图&#xff1a; example7_1.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "ut…