写一个注册登录的小任务,为后续自写一个云盘做准备
先完成一个小的注册登录的内容来熟悉整个流程,使重点更突出。
前置内容:注册登录
第一步:创建项目。
这里使用SpringBoot和Mybaties-plus完成这个任务。这两个东西是所谓的框架。简单理解的话就是它们以包、类、函数的形式提供了很多工具,使得我们可以少进行一些简单但繁琐的工作。举例来讲的话,比如我们现在要生一个火堆,如果不用框架,我们就要自己找木头木屑,想办法钻木取火;框架的作用就是给我们提供一个打火机和木头,这样我们只需要用打火机去把木头点燃就可以了。
在网站https://start.spring.io/中创建这个项目。这个网站创建出的项目会直接帮我们导入好一些需要用的包(框架中的工具),并配置好相关的文件。(新手不建议用IDE创建这种项目,会乱会晕)。选择
- Spring Web
- Spring Boot DevTools
- Spring Data JPA
- MySQL Driver
依赖,选择Spring Boot 3.3.5。并点击generate生成一个压缩包,解压压缩包。用IDE打开这个项目。
创建完成项目之后在pom.xml文件下找到
<dependencies>标签,在他下面加入
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency>
然后右键点击 pom.xml
文件并选择 Maven > Reload Project。这里的目的是添加mybatis-plus依赖。Spring Initializr中并不提供这个依赖,需要我们自己手动导入。
第二步:数据库设计
这这一步中,需要完成使项目可以链接到数据库和在数据库中创建一个user表两个任务
首先我们需要下载并安装mysql(网上很多教程,百度就行)然后在项目中的.properties文件下加入
# 服务器端口
server.port=8080# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis-Plus 配置
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
其中三个带your的变量需要自己替换:your_database_name是指数据库的名字。建议为这个小任务新建一个数据库,即在登录数据库之后CREAT一个DATABASE出来,新建的这个DATABASE的名字就是your_database_name(如何登录mysql、如何新建数据库网上都有教程)。your_username和your_password按照自己安装mysql时的设置来。
完成之后就可以在Application文件中点击运行了,正常情况下在这里运行窗口会卡住,卡主就对了。
然后再登录数据库,选中我们创建新数据库(USE your_database_name;)来进入到我们新创建的数据库,执行如下语句
CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 用户IDusername VARCHAR(50) NOT NULL UNIQUE, -- 用户名password VARCHAR(100) NOT NULL, -- 密码(建议加密存储)phone VARCHAR(20) UNIQUE, -- 手机号
);
作用是创建一个表(TABLE),表中含有ID,用户名、密码和手机号四个列。
第三步:实现后端
下面在启动项目的文件所在的文件夹下新建一个User类,一个Mapper接口。目的是可以直接在这个项目中操控这个表(免去了转到mysql的麻烦)
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {@TableIdprivate Long id;private String username;private String password;private String phone;
}
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}
这里用到了一个东西叫做注解,关于注解可以这样简单理解:注解的作用就是把一个类当做参数,给这个类加上一些额外的方法。比如@Data,他的作用就是给User类加上getset等方法。
接下来再新建两个类和一个接口:
public interface UserService {boolean registerUser(User user);User getUserById(Long id);User login(String username, String password);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
public class UserController {private final UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}@PostMapping("/register")public String register(User user){boolean res = userService.registerUser(user);if (res){return "Registration successful!";}return "Username already exists!";}@GetMapping("/login")public String login(@RequestParam String username, @RequestParam String password) {User user = userService.login(username, password);if (user != null) {return "Login successful!";}return "Invalid username or password!";}
}
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
@Service //这个注解将UserServiceImpl类注册到Spring容器中,这样UserService在被@Autowired注解时就可以创建这个类的实例
public class UserServiceImpl implements UserService{private final UserMapper userMapper;public UserServiceImpl(UserMapper userMapper) {this.userMapper = userMapper;}@Overridepublic boolean registerUser(User user) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("username",user.getUsername());if (userMapper.selectOne(queryWrapper) != null){return false;}return userMapper.insert(user) > 0;}@Overridepublic User getUserById(Long id) {return userMapper.selectById(id);}@Overridepublic User login(String username, String password) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("username", username).eq("password", password);return userMapper.selectOne(queryWrapper);}
}
这样子我们这个小项目就算完成了。在浏览器中输入localhost:8080/user/login?username=testuser&password=123456
就可以查看项目是否正常运行。
这里有一些小内容解释一下:
- User类和UserMapper接口相当于数据库,用User来实现数据存储,用UserMapper来实现增删查改等操作
- UserService定义我们要有哪些方法(这些方法是后端服务要用的,并不是要作用于前端的)
- UserServiceImpl对定义的方法来具体实现
- UserController则规定后端要给前端返回什么内容。