我的第一个项目(三):注册登陆功能(后端)(后端注册登录界面)

  本篇文章为你整理了我的第一个项目(三):注册登陆功能(后端)(后端注册登录界面)的详细内容,包含有注册登录界面后端程序编写 后端注册登录界面 登录注册是前端还是后端 登录注册功能项目描述 我的第一个项目(三):注册登陆功能(后端),希望能帮助你了解 我的第一个项目(三):注册登陆功能(后端)。

  新建项目:

  

  

  只点Java Web

  

  项目目录如下:

  

  

  

  

  1.首先,我们在pom.xml文件中导入第三方包:

  web服务,mysql连接驱动等一系列包

  

  pom.xml文件:

  

 ?xml version="1.0" encoding="UTF-8"? 

 

   project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"

   modelVersion 4.0.0 /modelVersion

   parent

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-parent /artifactId

   version 2.7.1 /version

   relativePath/ !-- lookup parent from repository --

   /parent

   groupId com.wulaoda /groupId

   artifactId loginhouduan /artifactId

   version 0.0.1-SNAPSHOT /version

   name loginhouduan /name

   description loginhouduan /description

   properties

   java.version 1.8 /java.version

   /properties

   dependencies

   !-- web--

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   /dependency

   !--测试--

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-test /artifactId

   scope test /scope

   /dependency

   !-- 链接池--

   dependency

   groupId com.alibaba /groupId

   artifactId druid /artifactId

   version 1.1.0 /version

   /dependency

   !-- mysql--

   dependency

   groupId mysql /groupId

   artifactId mysql-connector-java /artifactId

   version 8.0.11 /version

   /dependency

   !-- mybatis-plus--

   dependency

   groupId com.baomidou /groupId

   artifactId mybatis-plus-boot-starter /artifactId

   version 3.1.0 /version

   /dependency

   !-- 实体字段校验--

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-validation /artifactId

   /dependency

   /dependencies

   build

   plugins

   plugin

   groupId org.springframework.boot /groupId

   artifactId spring-boot-maven-plugin /artifactId

   /plugin

   /plugins

   /build

   /project

 

  

  

  2.然后我们配置数据库的连接参数:

  application.yml文件:

  

server:

 

   port: 3312

  spring:

   datasource:

   url: jdbc:mysql://localhost:3306/cruddemo?characterEncoding=utf8 useUnicode=true useSSL=false serverTimezone=UTC

   username: root

   password: root

   driver-class-name: com.mysql.cj.jdbc.Driver

 

  

  3.定义实体类entity:

  SysUserController.java

  定义数据类型

  并为其创建相应的getter和setter方法:

  

  

  

  

  

  

  

  

  然后就是这样:

  

package com.wulaoda.loginhouduan.entity;

 

  import com.baomidou.mybatisplus.annotation.TableName;

  @TableName("sys_user")

  public class SysUserEntity {

   private Long id;

   private String LoginName;

   private String name;

   private String password;

   public Long getId() {

   return id;

   public void setId(Long id) {

   this.id = id;

   public String getLoginName() {

   return LoginName;

   public void setLoginName(String loginName) {

   LoginName = loginName;

   public String getName() {

   return name;

   public void setName(String name) {

   this.name = name;

   public String getPassword() {

   return password;

   public void setPassword(String password) {

   this.password = password;

   @Override

   public String toString() {

   return "SysUserEntity{" +

   "id=" + id +

   ", LoginName=" + LoginName + \ +

   ", name=" + name + \ +

   ", password=" + password + \ +

   };

  }

 

  

  4.controller类:

  SysUserController.java文件:

  

package com.wulaoda.loginhouduan.controller;

 

  
import com.wulaoda.loginhouduan.req.SysUserLoginReq;

  import com.wulaoda.loginhouduan.req.SysUserSaveReq;

  import com.wulaoda.loginhouduan.resp.CommonResp;

  import com.wulaoda.loginhouduan.resp.SysUserLoginResp;

  import com.wulaoda.loginhouduan.service.SysUserService;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.util.DigestUtils;

  import org.springframework.web.bind.annotation.PostMapping;

  import org.springframework.web.bind.annotation.RequestBody;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.RestController;

  @RestController

  //绑定数据库表名

  @RequestMapping("/sys-user")

  public class SysUserController {

   @Autowired

   private SysUserService sysUserService;

   @PostMapping("register")

  // zxcv1234

   public CommonResp register(@RequestBody SysUserSaveReq req){

   req.setPassword(DigestUtils.md5DigestAsHex(req.getPassword().getBytes()));

   CommonResp resp = new CommonResp ();

   sysUserService.register(req);

   return resp;

   @PostMapping("login")

   public CommonResp login(@RequestBody SysUserLoginReq req){

  // zxcv1234

   req.setPassword(DigestUtils.md5DigestAsHex(req.getPassword().getBytes()));

   CommonResp resp = new CommonResp ();

   SysUserLoginResp loginResp = sysUserService.login(req);

   resp.setContent(loginResp);

   return resp;

  }

 

  

  

  5.mapper类:

  SysUserMapper.java文件:

  

package com.wulaoda.loginhouduan.mapper;

 

  import com.baomidou.mybatisplus.core.mapper.BaseMapper;

  import com.wulaoda.loginhouduan.entity.SysUserEntity;

  import org.apache.ibatis.annotations.Mapper;

  @Mapper

  public interface SysUserMapper extends BaseMapper SysUserEntity {

  }

 

  

  

  6.req请求类:

  SysUserLoginReq.java文件:

  

package com.wulaoda.loginhouduan.req;

 

  public class SysUserLoginReq {

  
8.service类

  

  

  impl/SysUserServicelmpl.java文件:

  

package com.wulaoda.loginhouduan.service.impl;

 

  import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

  import com.wulaoda.loginhouduan.entity.SysUserEntity;

  import com.wulaoda.loginhouduan.mapper.SysUserMapper;

  import com.wulaoda.loginhouduan.req.SysUserLoginReq;

  import com.wulaoda.loginhouduan.req.SysUserSaveReq;

  import com.wulaoda.loginhouduan.resp.SysUserLoginResp;

  import com.wulaoda.loginhouduan.service.SysUserService;

  import com.wulaoda.loginhouduan.utils.CopyUtil;

  import com.wulaoda.loginhouduan.utils.SnowFlake;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.stereotype.Service;

  import org.springframework.util.CollectionUtils;

  import org.springframework.util.ObjectUtils;

  import javax.annotation.Resource;

  import java.util.List;

  @Service

  public class SysUserServiceImpl extends ServiceImpl SysUserMapper, SysUserEntity implements SysUserService {

   @Resource

   private SysUserMapper sysUserMapper;

   @Autowired

   private SnowFlake snowFlake;

  
public void register(SysUserSaveReq req) {

   SysUserEntity user = CopyUtil.copy(req, SysUserEntity.class);

   if(ObjectUtils.isEmpty(req.getId())){

   SysUserEntity userDb = selectByLoginName(req.getLoginName());

   if(ObjectUtils.isEmpty(userDb)){

   user.setId(snowFlake.nextId());

   sysUserMapper.insert(user);

   @Override

   public SysUserLoginResp login(SysUserLoginReq req) {

   SysUserEntity userDb = selectByLoginName(req.getLoginName());

   if(ObjectUtils.isEmpty(userDb)){

   //用户不存在

   return null;

   }else {

   //登陆成功

   SysUserLoginResp userLoginResp = CopyUtil.copy(userDb, SysUserLoginResp.class);

   return userLoginResp;

   //查询loginName是否被注册

   public SysUserEntity selectByLoginName(String loginName){

   QueryWrapper SysUserEntity wrapper = new QueryWrapper ();

   wrapper.lambda().eq(SysUserEntity::getLoginName,loginName);

   List SysUserEntity userEntityList = sysUserMapper.selectList(wrapper);

   if(CollectionUtils.isEmpty(userEntityList)){

   return null;

   }else {

   return userEntityList.get(0);

  }

 

  

  SysUserService.java文件:

  

package com.wulaoda.loginhouduan.service;

 

  import com.wulaoda.loginhouduan.req.SysUserLoginReq;

  import com.wulaoda.loginhouduan.req.SysUserSaveReq;

  import com.wulaoda.loginhouduan.resp.SysUserLoginResp;

  public interface SysUserService {

   void register(SysUserSaveReq req);

   SysUserLoginResp login(SysUserLoginReq req);

  }

 

  

  

  9.utils类

  算法优化部分:

  CopyUtil.java文件:

  

package com.wulaoda.loginhouduan.utils;

 

  import org.springframework.beans.BeanUtils;

  import org.springframework.util.CollectionUtils;

  import java.util.ArrayList;

  import java.util.List;

  public class CopyUtil {

   * 单体复制

   public static T T copy(Object source, Class T clazz) {

   if (source == null) {

   return null;

   T obj = null;

   try {

   obj = clazz.newInstance();

   } catch (Exception e) {

   e.printStackTrace();

   return null;

   BeanUtils.copyProperties(source, obj);

   return obj;

   * 列表复制

   public static T List T copyList(List source, Class T clazz) {

   List T target = new ArrayList ();

   if (!CollectionUtils.isEmpty(source)){

   for (Object c: source) {

   T obj = copy(c, clazz);

   target.add(obj);

   return target;

  }

 

  

  SnowFlake.java文件:

  

package com.wulaoda.loginhouduan.utils;

 

  import org.springframework.stereotype.Component;

  import java.text.ParseException;

   * Twitter的分布式自增ID雪花算法

  @Component

  public class SnowFlake {

   * 起始的时间戳

   private final static long START_STMP = 1609459200000L; // 2021-01-01 00:00:00

   * 每一部分占用的位数

   private final static long SEQUENCE_BIT = 12; //序列号占用的位数

   private final static long MACHINE_BIT = 5; //机器标识占用的位数

   private final static long DATACENTER_BIT = 5;//数据中心占用的位数

   * 每一部分的最大值

   private final static long MAX_DATACENTER_NUM = -1L ^ (-1L DATACENTER_BIT);

   private final static long MAX_MACHINE_NUM = -1L ^ (-1L MACHINE_BIT);

   private final static long MAX_SEQUENCE = -1L ^ (-1L SEQUENCE_BIT);

   * 每一部分向左的位移

   private final static long MACHINE_LEFT = SEQUENCE_BIT;

   private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;

   private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;

   private long datacenterId = 1; //数据中心

   private long machineId = 1; //机器标识

   private long sequence = 0L; //序列号

   private long lastStmp = -1L;//上一次时间戳

   public SnowFlake() {

   public SnowFlake(long datacenterId, long machineId) {

   if (datacenterId MAX_DATACENTER_NUM datacenterId 0) {

   throw new IllegalArgumentException("datacenterId cant be greater than MAX_DATACENTER_NUM or less than 0");

   if (machineId MAX_MACHINE_NUM machineId 0) {

   throw new IllegalArgumentException("machineId cant be greater than MAX_MACHINE_NUM or less than 0");

   this.datacenterId = datacenterId;

   this.machineId = machineId;

   * 产生下一个ID

   * @return

   public synchronized long nextId() {

   long currStmp = getNewstmp();

   if (currStmp lastStmp) {

   throw new RuntimeException("Clock moved backwards. Refusing to generate id");

   if (currStmp == lastStmp) {

   //相同毫秒内,序列号自增

   sequence = (sequence + 1) MAX_SEQUENCE;

   //同一毫秒的序列数已经达到最大

   if (sequence == 0L) {

   currStmp = getNextMill();

   } else {

   //不同毫秒内,序列号置为0

   sequence = 0L;

   lastStmp = currStmp;

   return (currStmp - START_STMP) TIMESTMP_LEFT //时间戳部分

   datacenterId DATACENTER_LEFT //数据中心部分

   machineId MACHINE_LEFT //机器标识部分

   sequence; //序列号部分

   private long getNextMill() {

   long mill = getNewstmp();

   while (mill = lastStmp) {

   mill = getNewstmp();

   return mill;

   private long getNewstmp() {

   return System.currentTimeMillis();

   public static void main(String[] args) throws ParseException {

   // 时间戳

   // System.out.println(System.currentTimeMillis());

   // System.out.println(new Date().getTime());

   // String dateTime = "2021-01-01 08:00:00";

   // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

   // System.out.println(sdf.parse(dateTime).getTime());

   SnowFlake snowFlake = new SnowFlake(1, 1);

   long start = System.currentTimeMillis();

   for (int i = 0; i 10; i++) {

   System.out.println(snowFlake.nextId());

   System.out.println(System.currentTimeMillis() - start);

  }

 

  

  10.Git仓库拿代码:

  已开源,前端暂时未写好,后端接口部分后面还要再改

  https://gitee.com/tang-and-han-dynasties/login-entity.git

  

  以上就是我的第一个项目(三):注册登陆功能(后端)(后端注册登录界面)的详细内容,想要了解更多 我的第一个项目(三):注册登陆功能(后端)的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: