一、新建项目
- 新建项目,项目名称logindemo,组名为my,用的java21去写的,用的包管理为maven

- 添加依赖,我这边使用的3.4.3版本,添加了4个依赖

- 设计表单,设置一个自增的主键uid,然后再设置一下账号和密码的类型

- 添加测试账号

三、配置数据库
- 找到配置文件application.properties

- 输入数据库相关配置信息,此处配置了项目端口号为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层
package com.my.logindemo.service;import com.my.logindemo.domain.User;public interface UserService { User loginService(String uname, String password); User registService(User user);}
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进行登录和注册功能的测试

