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用哪个好?企业应当如何挑选适用的
有些新材料存在特殊性,并且在制造过程中对车间、设备、工艺、人员等方面提出更高的要求。还有些新材料加工流程复杂,涉及多种材料的请购、出入库、使用和管理等环节,解决各个业务环节无缝衔接问题是很多制造企业面临的管理难题。 新材料制造…...
Jetson Orin Nano 升级jetpack5.1.2刷机过程记录
一.刷机起因 orin nano 接了个IMX477的摄像头,用 命令行DISPLAY:0.0 nvgstcapture-1.0 显示的画面有撕裂,让卖家查问题,卖家测试没有撕裂,对比环境,orin nano出厂默认的是jetpack5.1.1,卖家用的jetpack5.1.2版本,为了解决差异,要升级jetpack版本,前后搞了2天半,记录一下. 另外…...
Unity UGUI轻量UI框架:200行代码实现零GC界面管理
1. 为什么还要自己手写UI框架?——当UGUI原生方案开始“卡脖子”很多人看到这个标题第一反应是:“都2024年了,还手写UI框架?Asset Store里几十个成熟方案,NGUI、FairyGUI、TextMeshPro配套的UI系统一抓一大把ÿ…...
混合求解器:用神经网络增强传统微分方程数值方法
1. 项目概述:当数值方法遇到机器学习在科学计算和工程仿真领域,求解常微分方程(ODE)和偏微分方程(PDE)是绕不开的核心任务。无论是模拟电路中的电流变化、预测天气系统的演变,还是分析机械结构的…...
top50 BF16算力(TFLOPS) 显卡排行榜 天梯图
排名显卡型号BF16算力(TFLOPS)售价(元)单TFLOPS价格(元)1B200(SXM)45002200000488.892H200(SXM)19801200000606.063MI300X1307750000573.834H100 SXM519501100000564.105RTX PRO 6000 Blackwell1150780000678.266H100 PCIe 80GB1560850000544.877RTX 50906803400050.008A100 80…...
Arduino PWM转4-20mA工业电流信号:二阶滤波与V/I转换电路设计
1. 项目概述:从PWM到工业标准电流信号在工业自动化、过程控制和传感器领域,4-20 mA电流环是一个几乎无处不在的标准。它用4 mA代表测量值的下限(如0C),20 mA代表上限(如100C),这种设…...
为什么视频代剪辑会影响你的内容传播效果
为什么你精心拍的视频,发出去却没人看? 你有没有过这样的经历:花了一整天拍Vlog,素材画质高清、内容真实,可一剪出来就显得平淡无奇,点赞寥寥?或者婚礼当天感动全场,回看成片却像流水…...
森优时铁锌维发根养黑用三个月真实效果实测:内服营养养黑的客观测评
"森优时铁锌维发根养黑用三个月真实效果实测显示,针对压力、熬夜引发的早白问题,通过内服补充毛囊所需营养的方式,多数使用者能感受到发根韧性提升、新生发色素沉淀改善,整体改善效果因人而异,合规的营养补充是目…...
如何进行TVA仿真引擎的“光照地狱”训练?
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
如何快速批量下载高质量歌词:ZonyLrcToolsX跨平台终极解决方案
如何快速批量下载高质量歌词:ZonyLrcToolsX跨平台终极解决方案 【免费下载链接】ZonyLrcToolsX ZonyLrcToolsX 是一个能够方便地下载歌词的小软件。 项目地址: https://gitcode.com/gh_mirrors/zo/ZonyLrcToolsX 还在为本地音乐库缺少歌词而烦恼吗࿱…...
Taotoken的审计日志功能为企业API安全与合规管理提供支持
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的审计日志功能为企业API安全与合规管理提供支持 当企业决定将大模型能力集成到内部业务流程中时,IT管理员和安…...
