文章目录
- 1.使用版本控制管理该项目
-
- 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类型的数据
-
- 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 提交添加表单数据
-
- 5.解决跨域问题
- 1.修改 vue.config.js 添加跨域配置
- 2.重启前端项目,修改请求url,进行添加操作
- 3.添加成功
1.使用版本控制管理该项目
1.创建远程仓库
![image-20240318154355592](https://img-blog.csdnimg.cn/img_convert/41211709c495364fe54e2f41a71ac85c.png)
2.克隆到本地
![image-20240318154452246](https://img-blog.csdnimg.cn/img_convert/a6b96e2f353cdad247a31a5713e87781.png)
2.后端项目环境搭建
1.创建一个maven项目
![image-20240318154854958](https://img-blog.csdnimg.cn/img_convert/1dcdb72c8096bb67c052f2167ee94551.png)
2.删除不必要的文件夹
![image-20240318154939265](https://img-blog.csdnimg.cn/img_convert/6840602ee4be8843f5329616fc6dc169.png)
3.pom.xml文件引入依赖
<parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.5.3</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><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><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.17</version></dependency><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;
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
6.启动主程序测试
![image-20240318160424845](https://img-blog.csdnimg.cn/img_convert/ade2ea238669290100bc3dbdb90d0140.png)
7.该阶段文件目录
![image-20240318162019440](https://img-blog.csdnimg.cn/img_convert/18b217fb05412fb7f86c5f8c2c8a90b4.png)
3.添加家居后端
1.思路分析
![image-20240318161034625](https://img-blog.csdnimg.cn/img_convert/e89da7d044a31eca9349ddcb4730b43f.png)
2.数据库表设计
DROP DATABASE IF EXISTS springboot_vue;
CREATE DATABASE springboot_vue;USE springboot_vue;
CREATE TABLE furn(
`id` INT(11) PRIMARY KEY AUTO_INCREMENT,
`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](https://img-blog.csdnimg.cn/img_convert/8c69331b46374b63e44da0e0a33b0389.png)
4.com/sun/furn/util/Result.java 编写封装返回json对象的工具类
package com.sun.furn.util;import lombok.Data;
import lombok.NoArgsConstructor;@Data
@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;
@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;
@Mapper
public interface FurnMapper extends BaseMapper<Furn> {
}
![image-20240318172729548](https://img-blog.csdnimg.cn/img_convert/8167e5da6760651374551f8f8c401f2e.png)
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;
@SpringBootTest
public class ApplicationTest {@Resourceprivate FurnMapper furnMapper;@Testpublic void FurnMapperTest() {Furn furn = furnMapper.selectById(1);System.out.println(furn);}
}
![image-20240318173216004](https://img-blog.csdnimg.cn/img_convert/557a0af81fa4d36a5f6b521bd2ba2517.png)
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;
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;
@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](https://img-blog.csdnimg.cn/img_convert/47371d1f54d1c29b1226d61a6003b48b.png)
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;
@Slf4j
@RestController
public class FurnController {@Resourceprivate FurnService furnService;@PostMapping("/save")public Result save(@RequestBody Furn furn) {log.info("furn = {} " + furn);furnService.save(furn);return Result.success();}
}
2.postman测试,不要忘记设置Content-Type为 application/json
![image-20240318185114244](https://img-blog.csdnimg.cn/img_convert/513e56406dc66864e3c0aaa0e99faf8d.png)
9.发送数据的注意事项
1.发送json类型的数据
1.请求方式
![image-20240318190354878](https://img-blog.csdnimg.cn/img_convert/2e8c51cb42e1841d61152a2c7518e4b3.png)
2.Content-Type设置
![image-20240318190418586](https://img-blog.csdnimg.cn/img_convert/6be35a286fe8a682120cc4659814ffaf.png)
2.使用表单或者请求参数类型提交
1.直接使用post表单形式提交
![image-20240318191149861](https://img-blog.csdnimg.cn/img_convert/5f9d7891668fbe7db00154b4e8389d51.png)
2.报错
![image-20240318191207189](https://img-blog.csdnimg.cn/img_convert/fa951dbec93d84c60f9971caebda8d71.png)
3.去掉@RequestBody注解再次请求
![image-20240318191338020](https://img-blog.csdnimg.cn/img_convert/709e94823bd5e15bf5db1235c99df8cd.png)
![image-20240318191404887](https://img-blog.csdnimg.cn/img_convert/f0cedffda0814b3b86d0da76979b3806.png)
4.也可以使用请求参数
![image-20240318191557668](https://img-blog.csdnimg.cn/img_convert/e59fea4dc12d1ccf2e049e0ea34f26a4.png)
10.@TableId注解使用
![image-20240318192237894](https://img-blog.csdnimg.cn/img_convert/c3ba731176ca348180b8299ac559a283.png)
4.添加家居前端
1.安装Axios
命令行到前端项目文件夹下输入命令 npm i axios -S
![image-20240318193036995](https://img-blog.csdnimg.cn/img_convert/5d601a46ca72edf3b8a1a9000e2b0396.png)
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](https://img-blog.csdnimg.cn/img_convert/e296f4343104a7d5e5421316d74269cb.png)
3.数据池
![image-20240318195549298](https://img-blog.csdnimg.cn/img_convert/584d2ba69b081d3d6fde18523c1ed463.png)
4.方法池
![image-20240318195647983](https://img-blog.csdnimg.cn/img_convert/7181c0f119cd32c80e0e31029cfe8aee.png)
5.结果展示
![image-20240318195802833](https://img-blog.csdnimg.cn/img_convert/58ef61363ad6fbf633c276fe50fd23f8.png)
3.创建工具文件创建request对象 src/utils/request.js
import axios from 'axios'
const request = axios.create({timeout: 5000
})
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](https://img-blog.csdnimg.cn/img_convert/66a60f2d75676f7ca1c015a285cfc3c8.png)
5.解决跨域问题
1.修改 vue.config.js 添加跨域配置
module.exports = {devServer: {port: 9999, proxy: {'/api': {target: 'http://localhost:8080', changeOrigin: true, pathRewrite: { '/api': '' }}}}
}
2.重启前端项目,修改请求url,进行添加操作
![image-20240319085530224](https://img-blog.csdnimg.cn/img_convert/8738975129b7a0d379023c6190f18546.png)
3.添加成功
![image-20240319085207631](https://img-blog.csdnimg.cn/img_convert/4fa57c2a838885cbe2435acdfadb6813.png)
![image-20240319085815820](https://img-blog.csdnimg.cn/img_convert/c899dff66055c3a1f10a2edbffd0501c.png)