SpringBoot+Vue项目(后端项目搭建 + 添加家居)

文章目录

    • 1.使用版本控制管理该项目
        • 1.创建远程仓库
        • 2.克隆到本地
    • 2.后端项目环境搭建
        • 1.创建一个maven项目
        • 2.删除不必要的文件夹
        • 3.pom.xml文件引入依赖
        • 4.application.yml 配置数据源(注意,数据库名还没写)
        • 5.com/sun/furn/Application.java 编写主程序
        • 6.启动主程序测试
        • 7.该阶段文件目录
    • 3.添加家居后端
        • 1.思路分析
        • 2.数据库表设计
        • 3.application.yml 填写数据库名
        • 4.com/sun/furn/util/Result.java 编写封装返回json对象的工具类
        • 5.com/sun/furn/bean/Furn.java 编写映射furn表的bean
        • 6.开发Mapper
          • 1.com/sun/furn/mapper/FurnMapper.java 编写Mapper接口
          • 2.com/sun/furn/ApplicationTest.java 测试Mapper接口
        • 7.开发Service
          • 1.com/sun/furn/service/FurnService.java 编写Service接口
          • 2.com/sun/furn/service/Impl/FurnServiceImpl.java 编写Service实现类
          • 3.com/sun/furn/ApplicationTest.java 测试,添加方法
        • 8.开发Controller
          • 1.com/sun/furn/controller/FurnController.java 编写Controller
          • 2.postman测试,不要忘记设置Content-Type为 `application/json`
        • 9.发送数据的注意事项
          • 1.发送json类型的数据
            • 1.请求方式
            • 2.Content-Type设置
          • 2.使用表单或者请求参数类型提交
            • 1.直接使用post表单形式提交
            • 2.报错
            • 3.去掉@RequestBody注解再次请求
            • 4.也可以使用请求参数
        • 10.@TableId注解使用
    • 4.添加家居前端
        • 1.安装Axios
          • 命令行到**前端**项目文件夹下输入命令 `npm i axios -S`
        • 2.点击添加按钮,出现添加家居的对话框
          • 1.src/views/HomeView.vue 引入对话框表单
          • 2.新增按钮绑定事件
          • 3.数据池
          • 4.方法池
          • 5.结果展示
        • 3.创建工具文件创建request对象 src/utils/request.js
        • 4.src/views/HomeView.vue 提交添加表单数据
          • 1.方法池
          • 2.出现跨域问题
        • 5.解决跨域问题
          • 1.修改 vue.config.js 添加跨域配置
          • 2.重启前端项目,修改请求url,进行添加操作
          • 3.添加成功

1.使用版本控制管理该项目

1.创建远程仓库

image-20240318154355592

2.克隆到本地

image-20240318154452246

2.后端项目环境搭建

1.创建一个maven项目

image-20240318154854958

2.删除不必要的文件夹

image-20240318154939265

3.pom.xml文件引入依赖
  <!--导入springboot父工程--><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.5.3</version></parent><dependencies><!--常规依赖--><!--web场景启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--引入测试场景启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--配置处理器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--数据库配置--><!--mysql依赖使用版本仲裁--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 引入 druid 依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.17</version></dependency><!--引入MyBatis-Plus场景启动器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency></dependencies>
4.application.yml 配置数据源(注意,数据库名还没写)
server:port: 8080
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rooturl: jdbc:mysql://localhost:3306/xxxx?useSSL=false&useUnicode=true&characterEncoding=UTF-8
5.com/sun/furn/Application.java 编写主程序
package com.sun.furn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Description: 主程序** @Author sun* @Create 2024/3/18 15:59* @Version 1.0*/
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
6.启动主程序测试

image-20240318160424845

7.该阶段文件目录

image-20240318162019440

3.添加家居后端

1.思路分析

image-20240318161034625

2.数据库表设计
-- 创建 springboot_vue
DROP DATABASE IF EXISTS springboot_vue;
CREATE DATABASE springboot_vue;USE springboot_vue; -- 创建家居表
CREATE TABLE furn(
`id` INT(11) PRIMARY KEY AUTO_INCREMENT, ## id
`name` VARCHAR(64) NOT NULL, ## 家居名
`maker` VARCHAR(64) NOT NULL, ## 厂商
`price` DECIMAL(11,2) NOT NULL, ## 价格
`sales` INT(11) NOT NULL, ## 销量
`stock` INT(11) NOT NULL ## 库存
);-- 初始化家居数据
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock`)
VALUES(NULL , '北欧风格小桌子' , '熊猫家居' , 180 , 666 , 7);
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock`)
VALUES(NULL , '简约风格小椅子' , '熊猫家居' , 180 , 666 , 7 );
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` )
VALUES(NULL , '典雅风格小台灯' , '蚂蚁家居' , 180 , 666 , 7 );
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` )
VALUES(NULL , '温馨风格盆景架' , '蚂蚁家居' , 180 , 666 , 7 );SELECT * FROM furn;
3.application.yml 填写数据库名

image-20240318161645555

4.com/sun/furn/util/Result.java 编写封装返回json对象的工具类
package com.sun.furn.util;import lombok.Data;
import lombok.NoArgsConstructor;/*** Description: 封装返回json数据的对象** @Author sun* @Create 2024/3/18 16:21* @Version 1.0*/@Data //getter,setter, tostring
@NoArgsConstructor //无参构造
public class Result<T> {private String code; //状态码private String msg; //携带信息private T data; //返回数据类型,在创建对象时使用泛型指定//有参构造,指定返回的数据以及泛型public Result(T data) {this.data = data;}//返回不带参数的成功信息public static Result success() {Result<Object> objectResult = new Result<>();objectResult.setCode("200");objectResult.setMsg("success");return objectResult;}//返回携带参数的成功信息public static <T> Result<T> success(T data) {Result<T> tResult = new Result<>(data);tResult.setCode("200");tResult.setMsg("success");return tResult;}//返回不带参数的失败信息public static Result error(String code, String msg) {Result<Object> objectResult = new Result<>();objectResult.setCode(code);objectResult.setMsg(msg);return objectResult;}//返回携带参数的失败信息public static <T> Result<T> error(String code, String msg, T data) {Result<T> tResult = new Result<>(data);tResult.setCode(code);tResult.setMsg(msg);return tResult;}}
5.com/sun/furn/bean/Furn.java 编写映射furn表的bean
package com.sun.furn.bean;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;/*** Description: 映射furn表的bean** @Author sun* @Create 2024/3/18 17:18* @Version 1.0*/
@Data
@TableName("furn")
public class Furn {private Integer id;private String name;private String maker;private Double price;private Integer sales;private Integer stock;
}
6.开发Mapper
1.com/sun/furn/mapper/FurnMapper.java 编写Mapper接口
package com.sun.furn.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sun.furn.bean.Furn;
import org.apache.ibatis.annotations.Mapper;/*** Description:** @Author sun* @Create 2024/3/18 17:22* @Version 1.0*/
@Mapper //注入容器
public interface FurnMapper extends BaseMapper<Furn> {//可以添加自定义方法
}

image-20240318172729548

2.com/sun/furn/ApplicationTest.java 测试Mapper接口
package com.sun.furn;import com.sun.furn.bean.Furn;
import com.sun.furn.mapper.FurnMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;/*** Description:** @Author sun* @Create 2024/3/18 17:28* @Version 1.0*/
@SpringBootTest
public class ApplicationTest {//输入Mapper的代理对象@Resourceprivate FurnMapper furnMapper;@Testpublic void FurnMapperTest() {Furn furn = furnMapper.selectById(1);System.out.println(furn);}
}

image-20240318173216004

7.开发Service
1.com/sun/furn/service/FurnService.java 编写Service接口
package com.sun.furn.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.sun.furn.bean.Furn;/*** Description:** @Author sun* @Create 2024/3/18 17:34* @Version 1.0*/
public interface FurnService extends IService<Furn> {//自定义方法
}
2.com/sun/furn/service/Impl/FurnServiceImpl.java 编写Service实现类
package com.sun.furn.service.Impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sun.furn.bean.Furn;
import com.sun.furn.mapper.FurnMapper;
import com.sun.furn.service.FurnService;
import org.springframework.stereotype.Service;/*** Description:** @Author sun* @Create 2024/3/18 17:35* @Version 1.0*/
@Service //注入容器
public class FurnServiceImpl extends ServiceImpl<FurnMapper, Furn> implements FurnService {//自定义方法实现
}
3.com/sun/furn/ApplicationTest.java 测试,添加方法
    @Testpublic void FurnServiceTest() {List<Furn> list = furnService.list();for (Furn furn : list) {System.out.println(furn);}}

image-20240318174336591

8.开发Controller
1.com/sun/furn/controller/FurnController.java 编写Controller
package com.sun.furn.controller;import com.sun.furn.bean.Furn;
import com.sun.furn.service.FurnService;
import com.sun.furn.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** Description:** @Author sun* @Create 2024/3/18 17:48* @Version 1.0*/
@Slf4j
@RestController // 由于是前后端分离,所以返回的都是json数据
public class FurnController {// 注入service的bean对象,可以调用IService的方法@Resourceprivate FurnService furnService;@PostMapping("/save")/** 注意:这里的requestBody表示前端必须以json格式发送数据* 但是,如果使用表单提交的数据则不能添加这个注解 */public Result save(@RequestBody Furn furn) {log.info("furn = {} " + furn);furnService.save(furn);return Result.success();}
}
2.postman测试,不要忘记设置Content-Type为 application/json

image-20240318185114244

9.发送数据的注意事项
1.发送json类型的数据
1.请求方式

image-20240318190354878

2.Content-Type设置

image-20240318190418586

2.使用表单或者请求参数类型提交
1.直接使用post表单形式提交

image-20240318191149861

2.报错

image-20240318191207189

3.去掉@RequestBody注解再次请求

image-20240318191338020

image-20240318191404887

4.也可以使用请求参数

image-20240318191557668

10.@TableId注解使用

image-20240318192237894

4.添加家居前端

1.安装Axios
命令行到前端项目文件夹下输入命令 npm i axios -S

image-20240318193036995

2.点击添加按钮,出现添加家居的对话框
1.src/views/HomeView.vue 引入对话框表单
    <!--    引入对话框表单,注意数据的名字需要跟javabean对应,这样才能封装--><el-dialog title="提示" v-model="dialogVisible" width="30%"><el-form :model="form" label-width="120px"><el-form-item label="家居名"><el-input v-model="form.name" style="width: 80%"></el-input></el-form-item><el-form-item label="厂商"><el-input v-model="form.maker" style="width: 80%"></el-input></el-form-item><el-form-item label="价格"><el-input v-model="form.price" style="width: 80%"></el-input></el-form-item><el-form-item label="销量"><el-input v-model="form.sales" style="width: 80%"></el-input></el-form-item><el-form-item label="库存"><el-input v-model="form.stock" style="width: 80%"></el-input></el-form-item></el-form><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取 消</el-button><el-button type="primary" @click="save">确 定</el-button></span></template></el-dialog>
2.新增按钮绑定事件

image-20240318195710405

3.数据池

image-20240318195549298

4.方法池

image-20240318195647983

5.结果展示

image-20240318195802833

3.创建工具文件创建request对象 src/utils/request.js
import axios from 'axios' // 通过 axios 创建对象
const request = axios.create({timeout: 5000
})
// request 拦截器
// 1. 可以对请求做一些处理
// 2. 比如统一加 token,Content-Type 等
request.interceptors.request.use(config => {config.headers['Content-Type'] = 'application/json;charset=utf-8';return config
}, error => {return Promise.reject(error)
});
//导出
export default request
4.src/views/HomeView.vue 提交添加表单数据
1.方法池
    // 点击确定时触发,提交添加信息的表单save() {request.post("http://localhost:8080/save", this.form).then(res => {console.log("res", res)})}
2.出现跨域问题

image-20240319084123683

5.解决跨域问题
1.修改 vue.config.js 添加跨域配置
// 跨域配置
module.exports = {devServer: {port: 9999, //启动端口//设置代理,解决跨域问题proxy: {'/api': {target: 'http://localhost:8080', //这样设置/api就代表了http://localhost:8080changeOrigin: true, //是否设置同源,这样浏览器就允许跨域访问pathRewrite: { //路径重写'/api': '' //选择忽略拦截器里面的单词}}}}
}
2.重启前端项目,修改请求url,进行添加操作

image-20240319085530224

3.添加成功

image-20240319085207631

image-20240319085815820

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/282549.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中医学习服务管理系统flask-django-php-nodejs

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的中医学习服务管理系统。当前的信息管理存在工作…

JAVA后端调用OpenAI接口 实现打字机效果(SSE)

SSE SSE&#xff08;Server-Sent Events&#xff0c;服务器发送事件&#xff09;是一种基于HTTP协议的通信技术&#xff0c;它允许服务器持续地将数据推送给客户端&#xff0c;而无需客户端发起请求。这种通信方式通常用于实时性要求较高的场景&#xff0c;如实时更新、通知、或…

Python Flask框架 -- 模版继承

一个网站中&#xff0c;大部分网页的模块是重复的&#xff0c;比如顶部的导航栏&#xff0c;底部的备案信息。如果在每个页面中都重复的去写这些代码&#xff0c;会让项目变得臃肿&#xff0c;提高后期维护成本。比较好的做法是&#xff0c;通过模板继承&#xff0c;把一些重复…

STM32-Flash闪存

简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程。 读写Flash的用途 1.利用程序存储器的剩余空间来保存掉电不丢失的用户数据。 2.通过在程序中…

CVE-2024-24112 XMall后台管理系统 SQL 注入漏洞分析

------作者本科毕业设计项目 基于 Spring Boot Vue 开发而成...... [Affected Component] /item/list /item/listSearch /sys/log /order/list /member/list (need time-based blind injection) /member/list/remove 项目下载地址 Exrick/xmall: 基于SOA架构的分布式…

Django日志(一)

一、概念与配置 1.1、概述 日志是程序员经常在代码中使用快速和方便的调试工具。它在调试方面比print更加的优雅和灵活 而且日志记录对于调试很有用,可以提供更多,更好的结构化,有关应用程序的状态和运行状况的信息 Django框架的日志通过python内置的logging模块实现的,可…

Elasticsearch:让你的 Elasticsearch 索引与 Python 和 Google Cloud Platform 功能保持同步

作者&#xff1a;来自 Elastic Garson Elasticsearch 内的索引 (index) 是你可以将数据存储在文档中的位置。 在使用索引时&#xff0c;如果你使用的是动态数据集&#xff0c;数据可能会很快变旧。 为了避免此问题&#xff0c;你可以创建一个 Python 脚本来更新索引&#xff0…

每日OJ题_牛客WY3 小易的升级之路(IO型OJ)

目录 牛客WY3 小易的升级之路 解析代码 牛客WY3 小易的升级之路 小易的升级之路_牛客题霸_牛客网 解析代码 #include <iostream> #include <vector> using namespace std;int getVal(int a, int b) {if (a > b)swap(a, b);for (int i a; i > 1; --i){if…

科研绘图一:箱线图(添加贝赛尔曲线)

R语言绘图系列—箱线图贝赛尔曲线 &#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&#xff09; 文章目录 R语言绘图系列---箱线图贝赛尔曲线&#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&…

【MySQL】MySQL用户管理

文章目录 一、用户1.用户信息2.创建用户3.删除用户4.修改用户密码 二、数据库的权限1.给用户授权2.回收权限 一、用户 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 1.用户信息 我们安装mysql之后&#xff0c;会自动…

DC-1靶场

一.环境搭建 下载地址 http://www.five86.com/downloads/DC-1.zip 把桥接设置为nat模式&#xff0c;打开靶机的时候会提示几个错误&#xff0c;点击重试即可 启动靶机&#xff0c;如下图所示即可 二.开始打靶 1.信息收集 arp-scan -l 扫描跟kali&#xff08;攻击机&…

MySQL基础(DDL,DML,DQL)

目录 一DDL 1.1数据库操作 1.1.1查询所有数据库&#xff1a; 1.1.2创建数据库 1.1.3 使用数据库 1.1.4 删除数据库 1.2表操作 1.2.1表操作 1.2.1.1创建表 1.2.1.1.1约束 1.2.1.1.2 数据类型 1.2.1.1.2.1 数值类型 1.2.1.1.2.2 字符串类型 1.2.1.1.2.3日期类型 1.…

Linux:执行命令的命令eval与Bash解析命令的方式

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 eval命令用于接收参数&#xff0c;并将这些参数作为一行命令执行&#xff0c;这也许会使人困惑&#xff0c;为什么我不能直接执行命令而需要使用eval命令间接执行呢&…

【应用笔记】LAT1305+使用STM32+TT类型IO的注意事项

1. 概述 在 STM32 系列 MCU 中&#xff0c; 除了一些特殊管脚外&#xff0c;绝大多数管脚都可以分类为 FT (兼容5V 信号)或 TT&#xff08;兼容 3V3 信号&#xff09;类型的 IO&#xff0c;由于 MCU 内部设计的不同&#xff0c; TT IO 相比 5V IO 有更多的限制&#xff0c;下面…

【回溯专题part1】【蓝桥杯备考训练】:n-皇后问题、木棒、飞机降落【已更新完成】

目录 1、n-皇后问题&#xff08;回溯模板&#xff09; 2、木棒&#xff08;《算法竞赛进阶指南》、UVA307&#xff09; 3、飞机降落&#xff08;第十四届蓝桥杯省赛C B组&#xff09; 1、n-皇后问题&#xff08;回溯模板&#xff09; n皇后问题是指将 n 个皇后放在 nn 的国…

MySQL数据库索引

目录 一.索引的基本内容 1.索引的定义 2.索引的作用 &#xff08;1&#xff09;设置了合适的索引之后&#xff0c;数据库利用各种快速定位技术&#xff0c;能够大大加快查询速度&#xff0c;这是创建索引的最主要的原因。 &#xff08;2&#xff09;当表很大或查询涉及到多…

鸿蒙一次开发,多端部署(四)工程管理

DevEco Studio的基本使用&#xff0c;请参考DevEco Studio使用指南。本章主要介绍如何使用DevEco Studio进行多设备应用开发。 说明&#xff1a; 本章的内容基于DevEco Studio 3.1.1 Release版本进行介绍&#xff0c;如您使用DevEco Studio其它版本&#xff0c;可能存在文档与产…

python --- 练习题3

目录 1、猜数字游戏&#xff08;使用random模块完成&#xff09; &#xff1a;继上期题目&#xff0c;附加 2、用户登录注册案例 3、求50~150之间的质数是那些&#xff1f; 4、打印输出标准水仙花数&#xff0c;输出这些水仙花数 5、验证:任意一个大于9的整数减去它的各位…

行业模板|DataEase制造行业大屏模板推荐

DataEase开源数据可视化分析平台于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

机器学习_正则化

文章目录 代价函数 如果我们有非常多的特征&#xff0c;我们通过学习得到的假设可能能够非常好地适应训练集&#xff08;代价函数可能几乎为 0&#xff09;&#xff0c;但是可能会不能推广到新的数据。 下图是一个回归问题的例子&#xff1a; 第一个模型是一个线性模型&#xf…