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

智能推荐

Ubuntu18.04安装Cartographer_error: cannot launch node of type [cartographer_ro-程序员宅基地

文章浏览阅读3.4k次,点赞5次,收藏44次。你好你好#include <iostream>using namespace std;int main(int argc, char* argv[]){ return 0;}_error: cannot launch node of type [cartographer_ros/cartographer_node]: cart

无法理解高等数学怎么办?_高数-程序员宅基地

文章浏览阅读5.8k次,点赞26次,收藏39次。我们学高等数学的时1候是这样的:这当然学不懂了,跨度太大了。这个锅,教材(对,说的就是同济《高等数学》)肯定得背。1 应该怎么学习?学习应该循序渐进,意思就是,应该从已有的知识出发,保持足够小的步伐前进。让我们把已有的知识称作 ,足够小的步伐称为 ,那么:才是最有效的学习方法。比如:注意:什么是 是比较主观的问题。下面我尝试用 的方法,解释下..._高数

openGauss学习笔记-42 openGauss 高级数据管理-触发器_opengauss数据库创建触发器语法-程序员宅基地

文章浏览阅读457次。触发器会在指定的数据库事件发生时自动执行函数。_opengauss数据库创建触发器语法

ELasticsearch的安装以及与spring-data-elasticsearch的整合使用_lorg/elasticsearch/common/settings/settings;ljava/-程序员宅基地

文章浏览阅读3.1k次。#Elasticsearch安装这里本人使用的是docker镜像安装,至于怎么安装就不说了,贴一下配置最基本的配置文件就好#集群名称,默认为elasticsearch, 命名规则为 es-产品名-ES版本cluster.name: luckyqing#节点名称,es启动时会自动创建节点名称,但你也可进行配置node.name: es-46-68-76#设置索引的分片数#index..._lorg/elasticsearch/common/settings/settings;ljava/lang/string;)v

Linux运维面试题(四)之Linux服务管理_linux运维网络服务4-程序员宅基地

文章浏览阅读337次。Linux运维面试题(四)之Linux服务管理_linux运维网络服务4

Spring注解依赖注入详解_依赖注入和注解的区别-程序员宅基地

文章浏览阅读1.1k次。依赖注入可以使用 `@Autowired`, `@Resource`, `@Inject` 三个注解,那么这3中注解有何异同呢?_依赖注入和注解的区别

随便推点

ES6新特总结_new easy let 选择那个不同的-程序员宅基地

文章浏览阅读250次。ES6新特性Babel转码器ECMAScript 6 简介学习网址:http://es6.ruanyifeng.com/ECMAScript是javascript标准ES6就是ECMAScript的第6个版本ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。ECMAScript 和 JavaScript 的关系ECM_new easy let 选择那个不同的

idea 如何配置软回车_idea 软换行什么意思-程序员宅基地

文章浏览阅读598次。软回车: 只是视觉上的换行, 其实文本内容并没实际换行, 这是为了我们可以直接看到整行内容, 而无需再使用鼠标水平滚动窗口idea 中可以配置编辑器软换行editor > general > 勾选 soft wrap these files: * (其中 * 表示软换行对所有文件生效)配置控制台软换行editor > console > 勾选 use soft wraps in console编辑器和控制台软换行效果如图..._idea 软换行什么意思

Vue 2项目如何升级到Vue 3?_vue2项目换成vue3-程序员宅基地

文章浏览阅读2.4w次,点赞14次,收藏67次。Vue2项目如何升级到Vue3_vue2项目换成vue3

Activiti工作流使用详细介绍_activiti开启工作流-程序员宅基地

文章浏览阅读554次。Activiti项⽬是⼀项新的基于Apache许可的开源BPM平台,BPM,即Business Process Management,业务流程管理,通常,BPM也指针对流程管理的信息化系统,其特点是注重流程驱动为核⼼,实现端到端全流程信息化管理。BPMN,即Business Process Modeling Notation,业务流程建模符号。BPMN定义了⼀个业务流程图。_activiti开启工作流

十大排序算法总结(c++版本)-程序员宅基地

文章浏览阅读78次。排序算法的分类:1插入:插入,折半插入,希尔2交换:冒泡,快速3选择:简单选择,堆4归并:归并(不只二路归并)5基数:1插入排序void insert_sort(){ for (int i = 1; i < n; i ++ ) { int x = a[i]; int j = i-1; while (j >= 0 && x < a[j])...

新颖的基于BS结构的毕业设计题目50例_bs实训题目-程序员宅基地

文章浏览阅读711次。新颖的基于BS结构的毕业设计题目50例,该基于BS结构的毕业设计题目包含了:UML对基于BS结构的PDM系统的分析与建模,基于BS结构的高校毕业设计选题系统的设计与实现,基于BS结构的第三方物流管理系统设计与实现,基于BS结构的毕业设计(论文)系统的设计与实现等。..._bs实训题目

推荐文章

热门文章

相关标签