> 技术文档 > SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能

SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能


一、新建项目

  • 新建项目,项目名称logindemo,组名为my,用的java21去写的,用的包管理为maven
    SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能
  • 添加依赖,我这边使用的3.4.3版本,添加了4个依赖
    SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能

二、设计数据库

  • 设计表单,设置一个自增的主键uid,然后再设置一下账号和密码的类型
    SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能
  • 添加测试账号
    SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能

三、配置数据库

  • 找到配置文件application.properties
    SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能
  • 输入数据库相关配置信息,此处配置了项目端口号为8082,可不配置,默认端口号为8080【注意:配置url处logindemo改为你的数据库名称】
spring.application.name=logindemo# 配置端口号为8082server.port=8082# 配置数据库# 配置驱动spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# 若连接的是云数据库则将localhost改为云端ipspring.datasource.url=jdbc:mysql://localhost:3306/logindemo?serverTimezone=UTC# Mysql用户spring.datasource.username=root# Mysql对应用户密码spring.datasource.password=123456# 配置MyBatismybatis.mapper-locations=classpath:mybatismybatis.type-aliases-package=com.my.logindemo.domain

四、实体类

  • 实体类里面的变量名称要与数据库的变量名称对应
package com.my.logindemo.domain;public class User { private int uid; private String uname; private String password; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}

四、Dao层的实现

  • 这里有2个方法,一个是找对应的账号和密码来实现登录功能,第二个就是查找账号来实现注册功能(账号唯一性)
  • 注意这里使用的是mybatis的方法
package com.my.logindemo.repository;import com.my.logindemo.domain.User;@org.apache.ibatis.annotations.Mapperpublic interface UserDao { User findByUname(String uname); User findByUnameAndPassword(String uname, String password); int insertUser(User user);}

五、配置mybatis

  • namespace用来映射自己的dao层
  • id绑定对应dao层的方法
  • user为自己数据库的名字
<?xml version=\"1.0\" encoding=\"UTF-8\" ?><!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\"><mapper namespace=\"com.my.logindemo.repository.UserDao\"> <select id=\"findByUname\" resultType=\"com.my.logindemo.domain.User\"> SELECT * FROM user WHERE uname = #{uname} </select> <select id=\"findByUnameAndPassword\" resultType=\"com.my.logindemo.domain.User\"> SELECT * FROM user WHERE uname = #{uname} AND password = #{password} </select> <insert id=\"insertUser\" parameterType=\"com.my.logindemo.domain.User\"> INSERT INTO user (uname, password) VALUES (#{uname}, #{password}) </insert></mapper>

六、实现service层

  • 我们这里先看一下service
package com.my.logindemo.service;import com.my.logindemo.domain.User;public interface UserService { /** * 登录业务逻辑 * @param uname 账户名 * @param password 密码 * @return */ User loginService(String uname, String password); /** * 注册业务逻辑 * @param user 要注册的User对象,属性中主键uid要为空,若uid不为空可能会覆盖已存在的user * @return */ User registService(User user);}
  • 第二个就是servicelmpl
package com.my.logindemo.service.servicelmpl;import com.my.logindemo.service.UserService;import com.my.logindemo.domain.User;import com.my.logindemo.repository.UserDao;import org.springframework.stereotype.Service;import jakarta.annotation.Resource;@Servicepublic class UserServicelmpl implements UserService{ @Resource private UserDao userDao; @Override public User loginService(String uname, String password) { User user = userDao.findByUnameAndPassword(uname, password); // 重要信息置空 if(user != null){ user.setPassword(\"\"); } return user; } @Override public User registService(User user) { //当新用户的用户名已存在时 if(userDao.findByUname(user.getUname())!=null){ // 无法注册 return null; }else{ // 插入用户到数据库 int result = userDao.insertUser(user); if (result > 0) { //返回创建好的用户对象 user.setPassword(\"\"); return user; } else { return null; } } }}

七、自定义工具类

  • 自定义一个信息回复
package com.my.logindemo.utils;public class Result<T> { private String code; private String msg; private T data; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } public Result() { } public Result(T data) { this.data = data; } public static Result success() { Result result = new Result<>(); result.setCode(\"200\"); result.setMsg(\"成功\"); return result; } public static <T> Result<T> success(T data) { Result<T> result = new Result<>(data); result.setCode(\"200\"); result.setMsg(\"成功\"); return result; } public static <T> Result<T> success(T data,String msg) { Result<T> result = new Result<>(data); result.setCode(\"200\"); result.setMsg(msg); return result; } public static Result error(String code, String msg) { Result result = new Result(); result.setCode(code); result.setMsg(msg); return result; }}

八、实现controller层

package com.my.logindemo.controller;import com.my.logindemo.domain.User;import com.my.logindemo.service.UserService;import com.my.logindemo.utils.Result;import org.springframework.web.bind.annotation.*;import jakarta.annotation.Resource;@RestControllerpublic class UserController { @Resource private UserService userService; @PostMapping(\"/login\") public Result<User> loginController(@RequestBody User newUser){ User user = userService.loginService(newUser.getUname(),newUser.getPassword()); if(user!=null){ return Result.success(user,\"登录成功!\"); }else{ return Result.error(\"403\",\"账号或密码错误!\"); } } @PostMapping(\"/register\") public Result<User> registController(@RequestBody User newUser){ User user = userService.registService(newUser); if(user!=null){ return Result.success(user,\"注册成功!\"); } else{ return Result.error(\"403\",\"用户名已存在!\"); } }}

九、测试

  • 使用postman进行登录和注册功能的测试
    SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能
    SpringBoot实现注册和登录功能(保姆级)_springboot登录注册功能