Spring boot + Mybatis 从零开始搭建个人博客系统(四)——登录注册(后端)

这里是登录注册后端部分代码及思路,前端请访问:
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 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值