当前位置:   article > 正文

Springboot3+vue3从0到1开发实战项目(一)_spring vue3 項目实战

spring vue3 項目实战

一. 可以在本项目里面自由发挥拓展

二. 知识整合项目使用到的技术

后端开发 : Validation, Mybatis,Redis, Junit,SpringBoot3 ,mysql,Swagger, JDK17 ,JWT,项目部署

前端开发: Vue3,Vite,Router,Pina ,Element-Plus

开发工具idea ,VsCode,navicat。。。

KunkunFamily新闻需求

用户:注册,登录,用户详细信息,更新用户基本信息, 更新用户头像,更新用户密码

文章新闻分类管理: 文章分类列表, 新增文章分类,更新文章分类,获取文章分类,删除文章分类

文章管理:新增文章, 更新文章,获取文章详情, 删除文章,文章列表(条件分页)

文件上传

后端开发要求以及前端需要熟知知识

三. 后端环境搭建:

1.根据前面的需求来写mysql数据库, 准备数据库表

  1. -- 创建User表
  2. create table user (
  3. id int unsigned primary key auto_increment comment 'ID',
  4. username varchar(20) not null unique comment '用户名',
  5. password varchar(32) comment '密码',
  6. nickname varchar(10) default '' comment '昵称',
  7. email varchar(128) default '' comment '邮箱',
  8. user_pic varchar(128) default '' comment '头像',
  9. create_time datetime not null comment '创建时间',
  10. update_time datetime not null comment '修改时间'
  11. ) comment '用户表';
  12. -- 后面添加数据
  13. insert into user(id, username, password, nickname, email,user_pic,create_time,update_time) VALUES ();
  14. -- 分类表
  15. create table category(
  16. id int unsigned primary key auto_increment comment 'ID',
  17. category_name varchar(32) not null comment '分类名称',
  18. category_alias varchar(32) not null comment '分类别名',
  19. create_user int unsigned not null comment '创建人ID',
  20. create_time datetime not null comment '创建时间',
  21. update_time datetime not null comment '修改时间',
  22. constraint fk_category_user foreign key (create_user) references user(id) -- 外键约束
  23. );
  24. -- 文章表
  25. create table article(
  26. id int unsigned primary key auto_increment comment 'ID',
  27. title varchar(30) not null comment '文章标题',
  28. content varchar(10000) not null comment '文章内容',
  29. cover_img varchar(128) not null comment '文章封面',
  30. state varchar(3) default '草稿' comment '文章状态: 只能是[已发布] 或者 [草稿]',
  31. category_id int unsigned comment '文章分类ID',
  32. create_user int unsigned not null comment '创建人ID',
  33. create_time datetime not null comment '创建时间',
  34. update_time datetime not null comment '修改时间',
  35. constraint fk_article_category foreign key (category_id) references category(id),-- 外键约束
  36. constraint fk_article_user foreign key (create_user) references user(id) -- 外键约束
  37. )

2.创建springboot工程项目 引入依赖

注意: 这里需要下载JDK17 SpringBoot3需要JDK17的支持,不再支持JDK8, 我的成功是因为把Springboot版本降低了实现效果,以为自己就是17

3. 书写配置文件

修改配置文件后缀名为yml

application.yml文件配置连接mysql

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/dahsijian
  5. username: root
  6. password: 1234

4. 创建基本的包结构

四. 开始编写开发

1. 根据数据库书写实体类pojo

1.1注册功能    这是自己画的注册需要什么

User.java

  1. @Data
  2. public class User {
  3. private Integer id; // 主键id
  4. private String username; // 用户名
  5. private String password; // 密码
  6. private String nickname; //昵称
  7. private String email; // 邮箱
  8. private String userPic; // 用户头像地址
  9. private LocalDateTime createTime;// 创建时间
  10. private LocalDateTime updateTime;// 更新时间
  11. }

在Maven配置lombok就可以不用写set,get了, 前面配置@Data

接口文档参数返回值类 Result.java

  1. @NoArgsConstructor
  2. @AllArgsConstructor
  3. public class Result<T> {
  4. private Integer code; //业务状态码 0-成功 1-失败
  5. private String message; //提示信息
  6. private T data; //响应数据
  7. //快速返回操作成功响应结果(带响应数据)
  8. public static <E> Result<E> success(E data) {
  9. return new Result<>(0, "操作成功", data);
  10. }
  11. //快速返回操作成功响应结果
  12. public static Result success() {
  13. return new Result(0, "操作成功", null);
  14. }
  15. public static Result error(String message) {
  16. return new Result(1, message, null);
  17. }
  18. }

看接口要有用户名密码校验,这里使用spring的注解方式导入包validation

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-validation</artifactId>
  4. </dependency>

UserController.java类

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController {
  4. // service层
  5. @Autowired
  6. private UserService userService;
  7. // 注册类 判断是否已存在用户查数据库
  8. @PostMapping("/register")
  9. // 使用注解 @Pattern以及表达式
  10. public Result register(@Pattern(regexp = "^\\${5,16}$") String username, @Pattern(regexp = "^\\${5,16}$")String password) {
  11. if (userService.findByUsername(username) != null) {
  12. return Result.error("该用户已被占用");
  13. }
  14. userService.register(username, password);
  15. return Result.success();
  16. // 以前的校验方式 : 调用查询用户的方法
  17. // User u = userService.findByUsername(username);
  18. // // 注册
  19. // if (u == null) {
  20. // // 没有占有
  21. // // 注册
  22. // userService.register(username, password);
  23. // return Result.success();
  24. // }else {
  25. // // 占用
  26. // return Result.error("用户已经被占用");
  27. // }
  28. }
  29. }

UserService

  1. public interface UserService{
  2. //根据用户名查询用户
  3. User findByUsername(String username);
  4. //注册
  5. void register(String username,String password);
  6. }

UserServiceImpl实现类

  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private UserMapper userMapper;
  5. @Override
  6. public User findByUsername(String username) {
  7. User user =userMapper.findByUserName(username);
  8. return user;
  9. }
  10. @Override
  11. public void register(String username, String password) {
  12. // 加密
  13. String md5String = Md5Util.getMD5String(password);
  14. // 添加
  15. userMapper.add(username,md5String);
  16. }
  17. }

MD5util.java

  1. public class Md5Util {
  2. /**
  3. * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
  4. */
  5. protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
  6. protected static MessageDigest messagedigest = null;
  7. static {
  8. try {
  9. messagedigest = MessageDigest.getInstance("MD5");
  10. } catch (NoSuchAlgorithmException nsaex) {
  11. System.err.println(Md5Util.class.getName() + "初始化失败,MessageDigest不支持MD5Util。");
  12. nsaex.printStackTrace();
  13. }
  14. }
  15. /**
  16. * 生成字符串的md5校验值
  17. *
  18. * @param s
  19. * @return
  20. */
  21. public static String getMD5String(String s) {
  22. return getMD5String(s.getBytes());
  23. }
  24. /**
  25. * 判断字符串的md5校验码是否与一个已知的md5码相匹配
  26. *
  27. * @param password 要校验的字符串
  28. * @param md5PwdStr 已知的md5校验码
  29. * @return
  30. */
  31. public static boolean checkPassword(String password, String md5PwdStr) {
  32. String s = getMD5String(password);
  33. return s.equals(md5PwdStr);
  34. }
  35. public static String getMD5String(byte[] bytes) {
  36. messagedigest.update(bytes);
  37. return bufferToHex(messagedigest.digest());
  38. }
  39. private static String bufferToHex(byte bytes[]) {
  40. return bufferToHex(bytes, 0, bytes.length);
  41. }
  42. private static String bufferToHex(byte bytes[], int m, int n) {
  43. StringBuffer stringbuffer = new StringBuffer(2 * n);
  44. int k = m + n;
  45. for (int l = m; l < k; l++) {
  46. appendHexPair(bytes[l], stringbuffer);
  47. }
  48. return stringbuffer.toString();
  49. }
  50. private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
  51. char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>>
  52. // 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
  53. char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
  54. stringbuffer.append(c0);
  55. stringbuffer.append(c1);
  56. }

UserMapper

  1. @Mapper
  2. public interface UserMapper {
  3. // 查询用户
  4. @Select("select * from user where username=#{username}")
  5. User findByUserName(String username);
  6. // 添加用户
  7. @Insert("insert into user(username,password,create_time,update_time) values(#{username},#{password},now(),now())")
  8. void add(String username, String password);// md5String
  9. }

完整的项目结构如下:

 测试接口使用postman 注册用户添加到数据库

数据库已经注册一个用户了

 

注意: 这里需要下载JDK17 SpringBoot3需要JDK17的支持,不再支持JDK8, 我的成功是因为把Springboot版本降低了实现效果,以为自己就是17

五. 项目遇到的小问题

1. 版本问题:java: 警告: 源发行版 17 需要目标发行版 17

安装了jdk17后之前是jdk1.8 想要把项目换成jdk17然后出现的这个问题

 解决 检查项目是不是使用到了jdk17:

 

 

 这一章完结!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/567689
推荐阅读
相关标签
  

闽ICP备14008679号