本篇文章为你整理了我的第一个项目(三):注册登陆功能(后端)(后端注册登录界面)的详细内容,包含有注册登录界面后端程序编写 后端注册登录界面 登录注册是前端还是后端 登录注册功能项目描述 我的第一个项目(三):注册登陆功能(后端),希望能帮助你了解 我的第一个项目(三):注册登陆功能(后端)。
新建项目:
只点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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。