实际应用场景实战之保存用户注册信息

  • 将前面章节所学的核心技术栈进行一个大融汇,并将其应用到实际的应用场景~"用户注册",从实践中来,从实践中去;
  • 掌握业务流程的梳理,需求的分析和数据库设计的能力,并按照业务流程图以实际的代码进行实战实现,提高代码实操能力;

 共有两大核心模块

核心业务模块一:用户提交注册信息 -用户表

核心业务模块二:发送用户验证合法性的邮件+邮件内容加密串-加密串

                         ~历史邮件发送表

根据业务流程图进行简单的需求分析

准备两张表:usr 和mail_encrypt

create table usr(
	id int(11) not null auto_increment,
    name varchar(255) character set utf8mb4 default null comment "名字",
	password varchar(100) character set utf8mb4 default null comment "密码",
    code varchar(255) character set utf8mb4 default null comment "工号",
    email varchar(255) character set utf8mb4 default null comment "邮箱",
    is_active int(11) default 1,
    primary key(id)
)engine=InnoDB auto_increment=343587 default charset=utf8 comment="用户信息表";
create table mail_encrypt(
	id int(11) not null auto_increment,
    user_id int(11) not null comment "用户id",
    user_email varchar(100) character set utf8mb4 default null  comment  "用户邮箱",
    encrypt_info varchar(500) character set utf8mb4 default null  comment  "加密信息",
    is_active tinyint(4) default 0 comment "是否有效,是否激活(1=是;0=否)",
    is_send tinyint(4) default null comment "是否发送成功(1=是;0=否)",
    send_time datetime default null comment "发送时间",
    create_time datetime default current_timestamp comment "创建时间",
    update_time timestamp null default null on update current_timestamp comment "更新时间",
    primary key(id)
)engine=InnoDB default charset=utf8 comment="加密串-历史邮件发送表";

通过逆序工程生成mapper,entity、mapper.xml等等(以后开发的时候最好先有个业务流程),只有遵从流程图的指导才能写出比较顺利的代码。

保存用户提交的注册信息至数据库中

UsrDto

package com.cuihua.boot.middleware.server.dto;

import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;

import java.io.Serializable;
@Data
public class UsrDto implements Serializable {
    @NotBlank(message = "用户姓名不能为空! ")
    private String name;

    @NotBlank(message = "注册邮箱不能为空! ")
    private String password;

    @NotBlank(message = "登录密码不能为空! ")
    private String email;

}

UsrController

    @RequestMapping(value = "register", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ResponseBody
    public BaseResponse register(@RequestBody @Validated UsrDto usrDto, BindingResult result){
        String checkRes = ValidatorUtil.checkResult(result);
        if(StringUtils.isNotBlank(checkRes)){
            return new BaseResponse(StatusCode.InvalidParam.getCode(), checkRes);
        }
        BaseResponse response = new BaseResponse(StatusCode.Success);
        try{
            usrService.register(usrDto);
        }catch (Exception e){
            log.info("用户Controller-用户注册-发生异常");
            response = new BaseResponse(StatusCode.Fail);
        }
        return response;
    }

UsrService

    //用户注册
    public void register(UsrDto usrDto) throws  Exception{
        //TODO:检查该邮箱账户是否已经存在
        if(usrMapper.countByEmail(usrDto.getEmail()) > 0){
            throw new RuntimeException("该邮箱账户已经存在,请进行更换!");
        }
        //TODO: 保存用户注册信息
        Usr entity = new Usr();
        BeanUtils.copyProperties(usrDto, entity);

        usrMapper.insertSelective(entity);
        Integer usrId = entity.getId();

        //TODO:发送一封邮件到用户注册的邮箱
    }

为确保邮箱的唯一性(UsrMapper.java

int countByEmail(@Param("email") String email);

UsrMapper.xml

  <select id="countByEmail" resultType="java.lang.Integer">
    select
        count(1) as total
    from usr
    where
        is_active = 1 and email = #{email};
  </select>

结果:

猜你喜欢

转载自blog.csdn.net/weixin_37841366/article/details/109043617