Springboot3+vue3从0到1开发实战项目(一)
一. 可以在本项目里面自由发挥拓展
二. 知识整合项目使用到的技术
后端开发 : Validation, Mybatis,Redis, Junit,SpringBoot3 ,mysql,Swagger, JDK17 ,JWT,项目部署
前端开发: Vue3,Vite,Router,Pina ,Element-Plus
开发工具idea ,VsCode,navicat。。。
KunkunFamily新闻需求
用户:注册,登录,用户详细信息,更新用户基本信息, 更新用户头像,更新用户密码
文章新闻分类管理: 文章分类列表, 新增文章分类,更新文章分类,获取文章分类,删除文章分类
文章管理:新增文章, 更新文章,获取文章详情, 删除文章,文章列表(条件分页)
文件上传
后端开发要求以及前端需要熟知知识

三. 后端环境搭建:
1.根据前面的需求来写mysql数据库, 准备数据库表
-- 创建User表
create table user (id int unsigned primary key auto_increment comment 'ID',username varchar(20) not null unique comment '用户名',password varchar(32) comment '密码',nickname varchar(10) default '' comment '昵称',email varchar(128) default '' comment '邮箱',user_pic varchar(128) default '' comment '头像',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '用户表';
-- 后面添加数据
insert into user(id, username, password, nickname, email,user_pic,create_time,update_time) VALUES ();-- 分类表
create table category(id int unsigned primary key auto_increment comment 'ID',category_name varchar(32) not null comment '分类名称',category_alias varchar(32) not null comment '分类别名',create_user int unsigned not null comment '创建人ID',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间',constraint fk_category_user foreign key (create_user) references user(id) -- 外键约束
);-- 文章表
create table article(id int unsigned primary key auto_increment comment 'ID',title varchar(30) not null comment '文章标题',content varchar(10000) not null comment '文章内容',cover_img varchar(128) not null comment '文章封面',state varchar(3) default '草稿' comment '文章状态: 只能是[已发布] 或者 [草稿]',category_id int unsigned comment '文章分类ID',create_user int unsigned not null comment '创建人ID',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间',constraint fk_article_category foreign key (category_id) references category(id),-- 外键约束constraint fk_article_user foreign key (create_user) references user(id) -- 外键约束
)
2.创建springboot工程项目 引入依赖
注意: 这里需要下载JDK17 SpringBoot3需要JDK17的支持,不再支持JDK8, 我的成功是因为把Springboot版本降低了实现效果,以为自己就是17



3. 书写配置文件
修改配置文件后缀名为yml

application.yml文件配置连接mysql
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/dahsijianusername: rootpassword: 1234
4. 创建基本的包结构

四. 开始编写开发
1. 根据数据库书写实体类pojo
1.1注册功能 这是自己画的注册需要什么

User.java
@Data
public class User {private Integer id; // 主键idprivate String username; // 用户名private String password; // 密码private String nickname; //昵称private String email; // 邮箱private String userPic; // 用户头像地址private LocalDateTime createTime;// 创建时间private LocalDateTime updateTime;// 更新时间
}
在Maven配置lombok就可以不用写set,get了, 前面配置@Data

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

@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {private Integer code; //业务状态码 0-成功 1-失败private String message; //提示信息private T data; //响应数据//快速返回操作成功响应结果(带响应数据)public static <E> Result<E> success(E data) {return new Result<>(0, "操作成功", data);}//快速返回操作成功响应结果public static Result success() {return new Result(0, "操作成功", null);}public static Result error(String message) {return new Result(1, message, null);}
}
看接口要有用户名密码校验,这里使用spring的注解方式导入包validation
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
UserController.java类
@RestController
@RequestMapping("/user")
public class UserController {// service层@Autowiredprivate UserService userService;// 注册类 判断是否已存在用户查数据库@PostMapping("/register")// 使用注解 @Pattern以及表达式public Result register(@Pattern(regexp = "^\\${5,16}$") String username, @Pattern(regexp = "^\\${5,16}$")String password) {if (userService.findByUsername(username) != null) {return Result.error("该用户已被占用");}userService.register(username, password);return Result.success();// 以前的校验方式 : 调用查询用户的方法
// User u = userService.findByUsername(username);
// // 注册
// if (u == null) {
// // 没有占有
// // 注册
// userService.register(username, password);
// return Result.success();
// }else {
// // 占用
// return Result.error("用户已经被占用");
// }}
}
UserService
public interface UserService{//根据用户名查询用户User findByUsername(String username);//注册void register(String username,String password);}
UserServiceImpl实现类
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User findByUsername(String username) {User user =userMapper.findByUserName(username);return user;}@Overridepublic void register(String username, String password) {// 加密String md5String = Md5Util.getMD5String(password);// 添加userMapper.add(username,md5String);}
}
MD5util.java
public class Md5Util {/*** 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合*/protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};protected static MessageDigest messagedigest = null;static {try {messagedigest = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException nsaex) {System.err.println(Md5Util.class.getName() + "初始化失败,MessageDigest不支持MD5Util。");nsaex.printStackTrace();}}/*** 生成字符串的md5校验值** @param s* @return*/public static String getMD5String(String s) {return getMD5String(s.getBytes());}/*** 判断字符串的md5校验码是否与一个已知的md5码相匹配** @param password 要校验的字符串* @param md5PwdStr 已知的md5校验码* @return*/public static boolean checkPassword(String password, String md5PwdStr) {String s = getMD5String(password);return s.equals(md5PwdStr);}public static String getMD5String(byte[] bytes) {messagedigest.update(bytes);return bufferToHex(messagedigest.digest());}private static String bufferToHex(byte bytes[]) {return bufferToHex(bytes, 0, bytes.length);}private static String bufferToHex(byte bytes[], int m, int n) {StringBuffer stringbuffer = new StringBuffer(2 * n);int k = m + n;for (int l = m; l < k; l++) {appendHexPair(bytes[l], stringbuffer);}return stringbuffer.toString();}private static void appendHexPair(byte bt, StringBuffer stringbuffer) {char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>>// 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换stringbuffer.append(c0);stringbuffer.append(c1);}
UserMapper
@Mapper
public interface UserMapper {// 查询用户@Select("select * from user where username=#{username}")User findByUserName(String username);// 添加用户@Insert("insert into user(username,password,create_time,update_time) values(#{username},#{password},now(),now())")void add(String username, String password);// md5String
}
完整的项目结构如下:

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

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

注意: 这里需要下载JDK17 SpringBoot3需要JDK17的支持,不再支持JDK8, 我的成功是因为把Springboot版本降低了实现效果,以为自己就是17
五. 项目遇到的小问题
1. 版本问题:java: 警告: 源发行版 17 需要目标发行版 17
安装了jdk17后之前是jdk1.8 想要把项目换成jdk17然后出现的这个问题

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



这一章完结!!!
相关文章:
Springboot3+vue3从0到1开发实战项目(一)
一. 可以在本项目里面自由发挥拓展 二. 知识整合项目使用到的技术 后端开发 : Validation, Mybatis,Redis, Junit,SpringBoot3 ,mysql,Swagger, JDK17 ,JWT,项目部署 前端开发: Vue3,Vite&am…...
[字符串操作] 有年代的病历单
有年代的病历单 题目描述 小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。 在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,…...
怎么批量提取文件名字到Excel中?
怎么批量提取文件名字到Excel中?Excel是由微软公司开发的一种电子表格软件,它是Microsoft Office办公套件的一部分。Excel提供了强大的数据处理和分析功能,用户可以使用Excel创建、编辑和管理电子表格,进行各种计算、数据分析、图…...
QT搭建的Ros/librviz的GUI软件
1.前言 开发初期学习了下面博主的文章,也报了他在古月局的课,相当于感谢吧。 ROS Qt5 librviz人机交互界面开发一(配置QT环境)-CSDN博客r 软件前期也是参考他的开源项目 GitHub - chengyangkj/Ros_Qt5_Gui_App …...
Docker 概述与安装
文章目录 1. Docker简介2. 传统虚拟机和容器3. Docker运行速度快的原因4. Docker软件4.1 Docker镜像4.2 Docker容器4.3 Docker仓库 5. Docker架构6. CentOS安装Docker6.1 卸载旧版本6.2 配置yum资源库6.3 安装Docker引擎6.4 启动docker引擎6.5 设置开机自启 7. 卸载Docker8. 运…...
JS作用域与作用域链
让我为大家介绍一下作用域与作用域链吧! 作用域 作用域规定了变量能够访问的“范围”,离开了这个“范围”变量便不能被访问。 作用域分为:局部作用域,全局作用域 一、局部作用域 局部作用域分为函数作用域与块作用域 1.函数作…...
elmentui 查看大图组件 点击图片关闭弹窗方法
elmentui 查看大图组件 点击图片关闭弹窗方法 html <el-imageref"Imgs":src"item.url ? item.url : ":preview-src-list"item.url ? [item.url] : []"click.stop"handlePreviewClose"class"alarm_img"/>js //图片…...
蓝桥杯官网练习题(最长子序列)
题目描述 我们称一个字符串S 包含字符串 T 是指 T 是 S 的一个子序列,即可以从字符串 S 中抽出若干个字符,它们按原来的顺序组合成一个新的字符串与 T 完全一样。 给定两个字符串 S 和 T,请问 T 中从第一个字符开始最长连续多少个字…...
Make sure that using this pseudorandom number generator is safe here.
问题类型:安全热点 安全问题级别:MEDIUM 一、问题代码 工具类Package: Java commons-lang3 库 RandomUtils 随机数工具类 import org.apache.commons.lang3.RandomUtils; 用法: RandomUtils.nextInt(0, 999999999) //生成 0…...
【C/C++】常见模拟题题解
题解 模拟双目运算符一元二次方程求解水仙花数统计学生成绩学生成绩管理模拟选举大小写字符转换最大公约数、最小公倍数字符串反序 模拟双目运算符 编写一个根据用户键入的两个操作数和一个双目运算符,由计算机输出结果的程序。 #include<stdio.h>int opera…...
TikTok 购物和直播的 5 个简单技巧
TikTok 的一切都很大:应用程序下载量、受众规模和病毒式营销活动。因此,该公司多方面进军社交商务也就不足为奇了。是的,这将是巨大的。自去年年底以来,TikTok Shopping 和TikTok 直播购物活动已在一些市场上线,并将于…...
神经网络中BN层简介及位置分析
1. 简介 Batch Normalization是深度学习中常用的技巧,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (Ioffe and Szegedy, 2015) 第一次介绍了这个方法。 这个方法的命名,明明是Standardization, 非…...
BGP基础配置
EBGP是AS之间 IBGP是AS内 R1-R2是EBGP,R4-R5是EBGP R2-R3-R4是IBGP 第一步基础配置:IP地址 [r1-GigabitEthernet0/0/0]ip ad 12.0.0.1 24 [r1-LoopBack0]ip ad 1.1.1.1 32 [r2-GigabitEthernet0/0/0]ip ad 12.0.0.2 24 [r2-LoopBack0]ip ad 2.2.2.2 32 [r2-Loop…...
【开题报告】基于深度学习的驾驶员危险行为检测系统
研究的目的、意义及国内外发展概况 研究的目的、意义:我国每年的交通事故绝对数量是一个十分巨大的数字,造成了巨大的死亡人数和经济损失。而造成交通事故的一个很重要原因就是驾驶员的各种危险驾驶操作行为。如果道路驾驶员的驾驶行为能够得到有效识别…...
Linux云服务器打包部署前端Vue项目
1. 打包 在项目包的终端使用命令打包成dist文件。 npm run build2. Linux云服务器上创建文件夹 mkdir /home/www/dist注:dist文件夹不用创建,将打包好的dist.zip放进去,然后解压就行。 3. 安装nginx yum install -y nginx4. 修改配置文件…...
Egg.js中Cookie和Session
Cookie HTTP请求是无状态的,但是在开发时,有些情况是需要知道请求的人是谁的。为了解决这个问题,HTTP协议设计了一个特殊的请求头:Cookie。服务端可以通过响应头(set-cookie)将少量数据响应给客户端&#…...
与 PCIe 相比,CXL为何低延迟高带宽?
文章目录 前言1. LatencyPCIE 生产者消费则模型结论Flit 包PCIE/CXL.ioCXL.cace & .mem总结 2. BandWidth常见开销CXL.IO Link efficiencyPCIe Link efficiencyCXL.IO bandwidthCXL.mem/.cache bandwidth 参考 前言 CXL 规范里没有具体描述与PCIe 相比低延时高带宽的原因&…...
Vue 入门指南:从零开始学习 Vue 的基础知识
🥝VUE官方文档 注意: 📒Vue 2 将于 2023 年 12 月 31 日停止维护。详见 Vue 2 延长 LTS。📒Vue 2 中文文档已迁移至 v2.cn.vuejs.org。📒想从 Vue 2 升级?请参考迁移指南。 文章目录 🍁前言&am…...
11.docker的网络-docker0的理解及bridge网桥模式的介绍与实例
1.docker0的基本理解 安装完docker服务后,我们首先查看一下宿主机的网络配置 ifconfig我们可以看到,docker服务会默认在宿主机上创建一个虚拟网桥docker0,该网桥网络的名字称为docker0。它在内核层连通了其他物理或者虚拟网卡,这…...
新材料制造ERP用哪个好?企业应当如何挑选适用的
有些新材料存在特殊性,并且在制造过程中对车间、设备、工艺、人员等方面提出更高的要求。还有些新材料加工流程复杂,涉及多种材料的请购、出入库、使用和管理等环节,解决各个业务环节无缝衔接问题是很多制造企业面临的管理难题。 新材料制造…...
别再乱用ref和reactive了!Vue3响应式API实战避坑指南(附代码对比)
Vue3响应式API深度解析:从原理到实战的避坑指南 在Vue3的日常开发中,ref和reactive这两个响应式API的使用频率极高,但许多开发者在使用过程中常常陷入各种"陷阱"。本文将深入剖析它们的底层机制,并通过实际案例展示如何…...
终极C++编码标准指南:基于C++核心规范的AI驱动最佳实践
终极C编码标准指南:基于C核心规范的AI驱动最佳实践 【免费下载链接】everything-claude-code The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Curso…...
BeesAndroid实战教程:如何在Nexus 6设备上搭建Android 7.0开发环境
BeesAndroid实战教程:如何在Nexus 6设备上搭建Android 7.0开发环境 【免费下载链接】BeesAndroid 项目地址: https://gitcode.com/gh_mirrors/be/BeesAndroid BeesAndroid是一款专为Android开发者打造的开源项目,通过本教程,你将快速…...
开源PLC编程全指南:从入门到实战的工业控制开发详解
开源PLC编程全指南:从入门到实战的工业控制开发详解 【免费下载链接】OpenPLC_Editor 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPLC_Editor 在工业自动化领域,开源技术正逐步打破传统PLC(可编程逻辑控制器)的封…...
我的数字记忆宝库:用m4s-converter守护那些即将消失的美好
我的数字记忆宝库:用m4s-converter守护那些即将消失的美好 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 去年冬天,我整…...
AI驱动的下一代云ERP:SAP Cloud ERP 2602 更新亮点小结
大家好,SAP Cloud ERP 2602版本更新了!2602的一个核心特点,是在保持标准化 SaaS 的前提下,将“嵌入式 AI 自然语言交互 Agentic AI”有机结合,让用户可以在熟悉的业务流程中,以对话方式完成信息查询、数据…...
手把手教你用GrsAi的Webhook和轮询,搞定GPT Image 1.5的异步图片生成任务
实战指南:基于GrsAi构建高可靠异步图像生成系统 当你的应用需要处理大量图像生成请求时,同步调用API往往会遇到超时、连接不稳定等问题。我曾在一个电商项目中使用同步调用,结果在促销高峰期系统频繁崩溃——直到改用异步架构才彻底解决问题。…...
Wan2.2-I2V-A14B镜像部署教程:系统盘50GB+数据盘40GB空间规划指南
Wan2.2-I2V-A14B镜像部署教程:系统盘50GB数据盘40GB空间规划指南 1. 镜像概述与核心价值 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,特别适合需要高质量视频生成的企业和个人开发者。这个镜像最大的特点是开箱即用——所有环境、依赖和…...
我从怀疑交智商税到真香,2026这款会议纪要自动生成软件真后悔没早用
上周开完3小时季度复盘会,散会leader丢一句“下班前把纪要整理好发我”,我对着录音逐句听了两个小时,错漏还一堆;上次跟客户谈合作,整理录音时把客户要求的交付时间写错,差点误事;做用户访谈录了…...
电商人必备!AI净界RMBG-1.4批量处理商品图,效率提升10倍
电商人必备!AI净界RMBG-1.4批量处理商品图,效率提升10倍 1. 电商人的痛点:每天被抠图折磨的日子 做电商的朋友,下面这个场景你一定不陌生: 早上9点,运营发来50张新款T恤的实拍图,要求今天下班…...
