本篇博客讲解如何使用SpringBoot和Vue如何快速搭建自己个人博客系统,功能比较少,但是作为一个期末小作业应该够了。本篇博客默认你已经有了SpringBoot和Vue的基础啦!后端还是用了MyBatis-Plus 完成数据库增删改查,我会分别从前后端介绍如何实现。同时呢,代码也会上传到GitHub上。
内容 | 地址 |
---|---|
GitHub | 链接 |
项目演示地址 | 链接 |
SpringBoot后端,主要是接收前端发送的请求,完成逻辑处理后,将Json数据返回前端,这样我们的网页就 “动”起来了!!!首先我们来看一下后端项目包的结构。
后端主要是一些配置过程相对比较麻烦,对于请求的处理,基本就是对数据库进行访问,然后对数据进行处理。配置包括如下:
这个简单的小项目,主要是两个数据表的逻辑,一个是博客表另一个是用户表
首选我们来看用户表的实现:
-用户数据表:
列名 | 数据类型 | 是否为空 | 备注 |
---|---|---|---|
user_id | bigint(20) | 否 | 主键(自增) |
user_name | varchar(64) | 否 | 用户名 |
user_avatar | varchar(255) | 否 | 用户头像 |
user_email | varchar(64) | 否 | 用户邮箱 |
user_ password | varchar(64) | 否 | 用户密码 |
user_status | int(5) | 否 | 是否被删除 |
user_created | datetime | 否 | 用户创建日期 |
last_login | datetime | 否 | 上一次登录时间 |
接下来我们看一下controller层,mapper层,entity层和Service层的代码:
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("m_user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String username;
private String avatar;
private String email;
private String password;
private Integer status;
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDateTime created;
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDateTime lastLogin;
@TableField(exist = false)
private String token;
}
这里需要添加很多注解,包裹主键,属性是否存在于数据表,日期转换为Json格式。
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@PostMapping("/login")
public CommonResult login(@Validated @RequestBody User user){
return userService.login(user);
}
@PostMapping("/register")
public CommonResult register(@Validated @RequestBody User user){
return userService.register(user);
}
@PostMapping("/resetPwd")
public CommonResult resetPwd(@Validated @RequestBody User user){
return userService.resetPwd(user);
}
@RequiresAuthentication
@GetMapping("/logout")
public CommonResult logout(){
// SecurityUtils.getSubject().logout();
return CommonResult.successResponse(null,"退出成功");
}
//更具用户名获取用户详细信息
@GetMapping("getUserByName/{username}")
public CommonResult getUserByName(@PathVariable("username") String username){
return userService.getUserByName(username);
}
}
主要控制前端请求去往哪里,完成制定的任务,真正得逻辑是在Service里面实现
public interface UserService extends IService<User> {
CommonResult login(User user);
CommonResult register(User user);
CommonResult resetPwd(User user);
CommonResult getUserByName(String username);
}
主要是几个接口得声明:
package com.work.user.service.impl;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.work.common.results.CommonResult;
import com.work.user.entity.User;
import com.work.user.mapper.UserMapper;
import com.work.user.service.UserService;
import com.work.utils.EmailUtil;
import com.work.utils.GetDateUtil;
import com.work.utils.JwtUtils;
import com.work.utils.RandomPwdUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
/**
*
* 服务实现类
*
*
* @author jian
* @since 2021-05-27
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Resource
private JwtUtils jwtUtils;
@Autowired
private EmailUtil emailUtil;