Spring boot + Mybatis 从零开始搭建个人博客系统(四)——登录注册(后端)_springboot mybatis个人博客-程序员宅基地

技术标签: Java  spring boot  博客  java  登录  后端  

这里是登录注册后端部分代码及思路,前端请访问:
Spring boot + Mybatis 从零开始搭建个人博客系统(三)——登录注册(前端)

数据表建立

p.s. 很多人喜欢先建表再设计页面设计功能,但这一点很可能导致你后期为了功能而回来修改表,添加字段或删减字段,可能会给自己造成很大的麻烦,所以我建议这里先设计个人中心的页面,思考什么功能会用到用户表,我的用户表应该设计什么字段,这些字段应该含有什么属性,后期可能会少很多不必要的麻烦。

用户表

名称 类型 非空 默认 主键 描述
id varchar ture true 主键用户ID标识
gender tinyint ture false 性别
user_name varchar ture false 昵称
email varchar false false 电子邮箱地址
birthday varchar false false 生日
image_url varchar false false 头像外链地址
recent_login_date timestamp false false 用户最近登录时间
phone varchar true false 手机号
password varchar true false 密码
name varchar false false 真实姓名
introduce varchar false false 个人介绍

除了用户表之外,我们还需要给用户赋予权限,所以需要一个权限表与用户权限对应表。
(网上有一些教程只建了用户和用户权限关系两张表,这是很不可取的,具体原因可以参考另一篇文章——数据库三大范式理解与Mybatis懒加载

权限表

名称 类型 非空 默认 主键 描述
id int ture true 权限ID
name varchar ture false 权限名称

用户权限关系表

名称 类型 非空 默认 主键 描述
user_id varchar ture false 用户ID
role_id int ture false 权限ID

实体类

实体类的建立我用了 Lombok 来简化代码,首先引入 Lombok 的包。

<!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
</dependency>

具体用法请查看 Lombok文档

其次我们还要安装 Lombok 的插件:
Lombok
附上 Lombok插件项目地址,请自行安装。

用户

package com.seagull.myblog.model;

import lombok.*;

import java.util.Date;

/**
 * @author Seagull_gby
 * @date 2019/3/21 20:43
 * Description: 用户类
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
   
    

    /**
     * 独特标识ID
     */
    private String id;

    /**
     * 性别(男1女2)
     */
    private int gender;

    /**
     * 昵称
     */
    private String userName;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 生日
     */
    private String birthday;

    /**
     * 手机号
     */
    private String phone;

    /**
     * 头像URL
     */
    private String imageUrl;

    /**
     * 权限
     */
    private Role role;

    /**
     * 最近登录日期
     */
    private Date recentLoginDate;

    /**
     * 密码
     */
    private String password;

    /**
     * 真实姓名
     */
    private String name;

    /**
     * 个人介绍
     */
    private String introduce;
}

权限实体

package com.seagull.myblog.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Seagull_gby
 * @date 2019/3/21 20:59
 * Description: 权限实体类
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role {
   
    

    /**
     * ID
     */
    private int id;

    /**
     * 权限名字
     */
    private String name;
}

“注册”流程

注册中验证码的控制我用到了redis进行缓存,这里先讲一下redis如何配置。

redis 配置

首先加入maven:

<!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>

之后对redis进行配置:

# redis配置
spring.redis.host= 127.0.0.1
spring.redis.port= 6379
spring.redis.password=****
spring.redis.pool.max-active= 100
spring.redis.pool.max-idle= 10
spring.redis.pool.max-wait= 100000
spring.redis.timeout= 0

关于redis的配置方法有很多,网上也有很多的介绍,我使用的是Jackson2JsonRedisSerialize进行序列化配置:

/**
 * @author Seagull_gby
 * @date 2019/3/28 16:51
 * Description: redis 配置类
 */
@Configuration
@EnableAutoConfiguration
public class RedisConfig {
   
    
    
    /**
     * redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
   
    
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        // 设置value的序列化规则和 key的序列化规则
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

编写redis的接口与实现类,这里可以根据自己的需要进行功能的增添和删减,具体方法可以去查阅RedisTemplate的用法
接口:

/**
 * @author Seagull_gby
 * @date 2019/3/28 16:53
 * Description: Redis 接口
 */
public interfac
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/abc67509227/article/details/89524990

智能推荐

2021年美赛C题目简述(中英文)_2021美赛c题-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏15次。2021年美赛C题目2021年美国大学生C题目为大数据类型题目,常用统计类的相关算法模型,推荐SAS,其次Stata,最后SPSS。2021年美赛C题目(中文):2021年美赛C题目(英文):相关算法以及代码实现会更新,敬请关注!最后祝愿各位同学争取佳绩!..._2021美赛c题

2023年全国职业院校技能大赛高职组大数据应用开发赛题第07套_1、根据hive的dwd库中相关表或mysql中ds_db01中相关表,计算出与用户customer-程序员宅基地

文章浏览阅读736次,点赞22次,收藏26次。环境说明:子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:1、从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面_1、根据hive的dwd库中相关表或mysql中ds_db01中相关表,计算出与用户customer_id

stm32f429跑linux,使用Buildroot编译STM32F429 linux内核,文件系统成功-程序员宅基地

文章浏览阅读760次。## Booting kernel from Legacy Image at c0007fb4 ...Image Name: linux-4.12_STM32F429Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 2994400 Bytes =2.9 MBLoad Address: c0008000Entry..._stm32f429 linux

C语言----输入scanf和输出printf详解_scanf输入什么就一定会以printf的形式输出什么吗?-程序员宅基地

文章浏览阅读2.5k次,点赞4次,收藏22次。C语言编程中,输入输出是基本操作,printf和scanf并不是C语言中的唯一的输入输出选择,对于输入有scanf()、getchar()、getche()、getch()、gets();对于输出有printf()、puts()、putchar(),他们各有自己的使用场景,本篇文章主要介绍常用的scanf和printf。_scanf输入什么就一定会以printf的形式输出什么吗?

python图书推荐系统 爬虫技术 大数据 协同过滤推荐算法 计算机 毕业设计(附源码)-程序员宅基地

文章浏览阅读1.1k次,点赞30次,收藏25次。python图书推荐系统 爬虫技术 大数据 协同过滤推荐算法 计算机 毕业设计(附源码)

opengl 实现Skin Mesh(骨骼动画)- GPU_gpuskin-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏21次。上一篇博客实现了cpu skin(蒙皮)的骨骼动画,接下来我们要实现 gpu skin(蒙皮) 的骨骼动画首先我们需要知道什么是蒙皮,在上一博客实现的骨骼动画中,哪一步是蒙皮 。在模型文件中可以读到的数据是顶点和骨骼的对应关系,从动画文件中可以读到每一帧骨骼的数据,而根据每一帧骨骼的数据计算出顶点位置的过程就叫做蒙皮,也就是对应上一篇博客代码中的ComputeVertPos函数。另外还要知道为..._gpuskin

随便推点

Android简单的利用MediaRecorder进行录音 Android基础学习评论收藏举报-程序员宅基地

文章浏览阅读94次。亲,你的浏览器过时了,请立即更换Chrome浏览器。X您还未登录!|登录|注册|帮助CSDN首页资讯论坛博客下载搜索更多CTO俱乐部学生大本营培训充电移动开发软件研发云计算程序员TUP裴裴的Android学习和分享爱学习,爱分享。&lt;!--我的首页--&gt;..._android 添加录音评论

图形验证码+短信验证码【Java应用实例】_图形验证码下面如何写短信验证码-程序员宅基地

文章浏览阅读2.6w次,点赞19次,收藏60次。一、图形验证码的实现1.1 简介常在网上晃悠的人,对下面这张图都不会陌生。特别是在注册新账号、确认交易时,它们都会频繁出现,要求我们输入正确的验证码,那这些看上去跟我们要做的事情完全无关的验证码到底有何作用呢?其实,验证码的校验即是一个直接的图灵测试,简单的逻辑是:服务提供者向用户方提出一个较为复杂的问题,能正确回答的即是人类,回答不出的即是机器或者程序代码。这个概念基于这样一个重..._图形验证码下面如何写短信验证码

【UiPath2022+C#】UiPath Switch_uipath switch控件-程序员宅基地

文章浏览阅读1.2w次。本文主要介绍了UiPath的Switch语句实现方式。这大概是最详细的UiPath使用中文文档,环境:UiPath Studio Community 2022.4.3/Windows/C#,网上的文档和教程基本都是VB的,本文基于C#学习UiPath。_uipath switch控件

浅析 Node 进程与线程_nodejs pipe占用主线程吗?-程序员宅基地

文章浏览阅读267次。进程与线程是操作系统中两个重要的角色,它们维系着不同程序的执行流程,通过系统内核的调度,完成多任务执行。今天我们从 Node.js(以下简称 Node)的角度来一起学习相关知识,通过本文读者将了解 Node 进程与线程的特点、代码层面的使用以及它们之间的通信。概念首先,我们还是回顾一下相关的定义:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配..._nodejs pipe占用主线程吗?

(零)OpenStack ( Train版 ) 搭建环境_openstack train-程序员宅基地

文章浏览阅读849次。大多数 OpenStack 环境中包含认证、镜像、计算和至少一个网络服务,还有仪表盘,仪表盘要求至少要有镜像服务,计算服务和网络服务。配置每个节点必须用有管理员权限的帐号。可以用 root用户或 sudo 工具来执行这些命令。由于 Openstack 服务数量以及虚拟机数量,为了获得最好的性能,我们推荐你的环境满足或者超过最小的硬件需求。如果在增加了更多的服务或者虚拟机后性能下降,请考虑为你的环境增加硬件资源。为了避免混乱和为 OpenStack 提供更多资源,推荐最小化安装 Linux 系统。_openstack train

go 语言常量_go 常量-程序员宅基地

文章浏览阅读877次。go 语言常量_go 常量

推荐文章

热门文章

相关标签