Spring Boot + Vue的网上商城之商品管理

Spring Boot + Vue的网上商城之商品管理

在网上商城中,商品管理是一个非常重要的功能。它涉及到商品的添加、编辑、删除和展示等操作。本文将介绍如何使用Spring Boot和Vue来实现一个简单的商品管理系统。
下面是一个实现Spring Boot + Vue的网上商城之商品管理的思路:

  1. 创建一个Spring Boot项目,使用Spring Initializr或手动创建。添加所需的依赖,如Spring Web、Spring Data JPA和H2数据库。

  2. 创建一个名为"Product"的实体类,表示商品。在该类中定义商品的属性,如id、名称、价格等,并使用JPA注解进行映射。

  3. 创建一个名为"ProductRepository"的接口,继承自JpaRepository,并使用@Repository注解标记。该接口将用于定义与商品数据的交互方法,如查询所有商品、添加商品、更新商品和删除商品等。

  4. 创建一个名为"ProductController"的类,使用@RestController注解标记。在该类中定义商品管理的API接口,如获取所有商品的接口、添加商品的接口、更新商品的接口和删除商品的接口等。在每个接口方法中,调用ProductRepository中定义的方法来实现具体的业务逻辑。

  5. 配置数据库连接信息,如数据库的URL、用户名和密码等。可以在application.properties或application.yml文件中进行配置。

  6. 运行Spring Boot应用程序,确保API接口能够正常工作,并能够通过Postman或浏览器访问。

  7. 创建一个Vue项目,使用Vue CLI或手动创建。安装所需的依赖,如vue-router和axios。

  8. 创建一个名为"ProductList"的组件,用于显示商品列表。在该组件中,使用axios库发送HTTP请求,调用商品管理的API接口,获取所有商品的数据,并在页面上展示出来。

  9. 创建一个名为"ProductForm"的组件,用于添加和编辑商品。在该组件中,使用axios库发送HTTP请求,调用商品管理的API接口,添加或更新商品的数据。

  10. 创建一个名为"ProductItem"的组件,用于显示单个商品的详细信息。在该组件中,使用axios库发送HTTP请求,调用商品管理的API接口,获取单个商品的数据,并在页面上展示出来。

  11. 配置路由,将ProductList、ProductForm和ProductItem组件与相应的URL路径进行关联。

  12. 运行Vue应用程序,确保页面能够正常显示,并能够通过添加、编辑和删除商品进行交互。

以上是一个实现Spring Boot + Vue的网上商城之商品管理的思路。根据这个思路,你可以按照步骤逐步实现整个项目。

技术栈

  • 后端:Spring Boot、Spring Data JPA、MySQL
  • 前端:Vue、Vue Router、Axios、Element UI

后端实现

创建Spring Boot项目

首先,我们需要创建一个Spring Boot项目。可以使用Spring Initializr(https://start.spring.io/)来快速生成项目骨架。

数据库设计

在MySQL数据库中创建一个名为"product"的表,用于存储商品信息。表结构如下:

CREATE TABLE product (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,price DECIMAL(10, 2) NOT NULL,description VARCHAR(255)
);

创建实体类和Repository

在Java代码中创建一个名为"Product"的实体类,用于映射数据库表。同时,创建一个名为"ProductRepository"的接口,用于访问数据库。

@Entity
@Table(name = "product")
public class Product {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private BigDecimal price;private String description;// 省略getter和setter方法
}@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}

创建商品管理API

在Spring Boot项目的控制器中创建商品管理的API。例如,创建一个名为"ProductController"的类,并实现以下接口:

  • 获取所有商品列表:GET /api/products
  • 添加商品:POST /api/products
  • 编辑商品:PUT /api/products/{id}
  • 删除商品:DELETE /api/products/{id}
@RestController
@RequestMapping("/api/products")
public class ProductController {@Autowiredprivate ProductRepository productRepository;@GetMappingpublic List<Product> getAllProducts() {return productRepository.findAll();}@PostMappingpublic Product addProduct(@RequestBody Product product) {return productRepository.save(product);}@PutMapping("/{id}")public Product updateProduct(@PathVariable Long id, @RequestBody Product product) {Product existingProduct = productRepository.findById(id).orElseThrow(() -> new RuntimeException("Product not found"));existingProduct.setName(product.getName());existingProduct.setPrice(product.getPrice());existingProduct.setDescription(product.getDescription());return productRepository.save(existingProduct);}@DeleteMapping("/{id}")public void deleteProduct(@PathVariable Long id) {productRepository.deleteById(id);}
}

运行后端服务

使用IDE工具(如IntelliJ IDEA)运行Spring Boot项目,后端服务将在默认端口(如8080)上启动。

前端实现

创建Vue项目

使用Vue CLI来创建一个新的Vue项目。打开命令行,并执行以下命令:

vue create product-management

安装依赖

进入项目目录,并安装所需的依赖:

cd product-management
npm install axios element-ui vue-router

创建组件

在src目录下创建一个名为"components"的文件夹,并在其中创建以下组件:

  • ProductList.vue:用于展示商品列表
  • ProductForm.vue:用于添加和编辑商品
  • ProductItem.vue:用于展示单个商品

配置路由

在src目录下创建一个名为"router"的文件夹,并在其中创建一个名为"index.js"的文件。在该文件中配置路由:

import Vue from 'vue'
import VueRouter from 'vue-router'
import ProductList from '../components/ProductList.vue'
import ProductForm from '../components/ProductForm.vue'Vue.use(VueRouter)const routes = [{ path: '/', component: ProductList },{ path: '/add', component: ProductForm },{ path: '/edit/:id', component: ProductForm }
]const router = new VueRouter({mode: 'history',routes
})export default router

创建API服务

在src目录下创建一个名为"services"的文件夹,并在其中创建一个名为"productService.js"的文件。在该文件中定义与后端API的交互:

import axios from 'axios'const apiClient = axios.create({baseURL: '/api/products',headers: {'Content-Type': 'application/json'}
})export default {getAllProducts() {return apiClient.get()},addProduct(product) {return apiClient.post('', product)},updateProduct(id, product) {return apiClient.put(`/${id}`, product)},deleteProduct(id) {return apiClient.delete(`/${id}`)}
}

编写组件代码

打开ProductList.vue文件,并编写以下代码:

<template><div><h1>商品列表</h1><router-link to="/add" class="btn btn-primary">添加商品</router-link><table class="table"><thead><tr><th>ID</th><th>名称</th><th>价格</th><th>操作</th></tr></thead><tbody><tr v-for="product in products" :key="product.id"><td>{{ product.id }}</td><td>{{ product.name }}</td><td>{{ product.price }}</td><td><router-link :to="`/edit/${product.id}`" class="btn btn-primary">编辑</router-link><button @click="deleteProduct(product.id)" class="btn btn-danger">删除</button></td></tr></tbody></table></div>
</template><script>
import productService from '../services/productService'export default {data() {return {products: []}},methods: {deleteProduct(id) {if (confirm('确定要删除该商品吗?')) {productService.deleteProduct(id).then(() => {this.getAllProducts()}).catch(error => {console.log(error)})}},getAllProducts() {productService.getAllProducts().then(response => {this.products = response.data}).catch(error => {console.log(error)})}},mounted() {this.getAllProducts()}
}
</script>

类似地,编写ProductForm.vue和ProductItem.vue组件的代码。

配置入口文件

打开main.js文件,并添加以下代码:

import Vue from 'vue'
import App from './App.vue'
import router from './router'Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')

运行前端项目

在命令行中执行以下命令,启动前端项目:

npm run serve

前端项目将在默认端口(如8081)上启动。

测试

现在,打开浏览器并访问http://localhost:8081,你将看到一个简单的商品管理界面。你可以添加、编辑和删除商品,并查看商品列表。

结论

通过结合Spring Boot和Vue,我们成功地实现了一个简单的商品管理系统。这个系统具有良好的用户界面和用户体验,并且能够与后端进行数据交互。你可以根据实际需求对其进行扩展和优化。

以上是关于Spring Boot + Vue的网上商城之商品管理的详细介绍和代码案例。希望对你有所帮助!

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

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

相关文章

Java学习笔记37——网络编程01

网络编程入门 网络编程入门网络编程概述网路编程的三要素ip地址InetAddress类的使用端口 网络编程入门 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理…

linux 多重启动grub2详解

https://www.gnu.org/software/grub/manual/grub/grub.pdf

怎么判断一个ip地址是否正确

在网络通信和计算机领域中&#xff0c;IP地址&#xff08;Internet Protocol Address&#xff09;是一个关键的概念。但是&#xff0c;很多人对于如何判断一个IP地址是否正确感到困惑。本文将深入探讨这个问题&#xff0c;并提供一些实用的方法来验证IP地址的正确性。 IP地址是…

Linux C进程间通信(IPC)

概述 每个进程有独立的进程空间&#xff1a; 好处————安全 缺点&#xff1a;开销大&#xff08;独立的地址空间&#xff09;&#xff1b;进程的通信更加困难&#xff08;对其他进程的操作开销也大&#xff09; 广义上的进程间通信&#xff1a; A进程写给文件/数据库&am…

Python测试框架 Pytest —— mock使用(pytest-mock)

pytest-mock 安装&#xff1a;pip install pytest-mock 这里的mock和unittest的mock基本上都是一样的&#xff0c;唯一的区别在于pytest.mock需要导入mock对象的详细路径。 # weateher_r.py class Mock_weather():def weather(self):天气接口passdef weather_result(self):模…

【算法训练-链表 七】【排序】:链表排序、链表的奇偶重排、重排链表

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【链表的排序】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&am…

光栅和矢量图像处理:Graphics Mill 11.4.1 Crack

Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG 和另外 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像操作 可处理任何尺寸&am…

第一百三十九回 介绍三个BLE包

文章目录 概要说明具体示例flutter_reactive_bleflutter_blue_plusflutter_ttc_ble我们在上一章回中介绍了图标旁边小红点相关的内容,本章回中将 介绍三个BLE包.闲话休提,让我们一起Talk Flutter吧。 概要说明 在移动开发中使用BLE功能时需要使用平台提供的接口,这些接口与…

Blender--》页面布局及基本操作讲解

接下来我会在three.js专栏中分享关于3D建模知识的文章&#xff0c;如果学习three朋友并且想了解和学习3D建模&#xff0c;欢迎关注本专栏&#xff0c;关于这款3D建模软件blender的安装&#xff0c;我在前面的文章已经讲解过了&#xff0c;如果不了解的朋友可以去考考古&#xf…

现货黄金代理好吗?

做黄金代理这个职业好吗&#xff1f;从目前的市场现状来看&#xff0c;其实做黄金代理很不错的。在股票市场中&#xff0c;投资者只能通过买涨进盈利&#xff0c;所以当市场行情不好的时候&#xff0c;股票经纪人的业务将很难展开&#xff0c;而现货黄金投资者不一样&#xff0…

腾讯云服务器CVM标准型S5性能测评和租用费用

腾讯云服务器CVM标准型S5实例具有稳定的计算性能&#xff0c;CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽&#xff0c;15个月313.2元、2核4G配置748.2元15个月&#xff0c;CPU内存配置还可以选择4核8G、8核16G等配置&#xff0c;公网带宽可选1M、3M、5M或10M&#xff0c;百…

Vue中对于指令的介绍

Vue指令 文章目录 Vue指令1、介绍2、指令介绍2.1、v-html2.2、v-show和v-if3.2、v-else 和 v-else-if3.3、v-on3.4、v-bind3.5、v-for3.6、v-for 中的key3.7、v-model 3、指令修饰符3.1、 按键修饰符3.2、 监听v-model修饰符3.3、 事件修饰符 1、介绍 Vue 会根据不同的【指令】…

doris docker环境编译部署

1.准备doris docker环境 xiuchenggongxiuchengdeMacBook-Pro bin % docker pull apache/doris:build-env-ldb-toolchain-latestbuild-env-ldb-toolchain-latest: Pulling from apache/doris eeedae70be19: Pull complete a3ed95caeb02: Pull complete Digest: sha256:63d9a9…

龙迅LT86102UX HDMI一进二出,支持分辨率4K60HZ

龙迅LT86102UXE 1. 描述 龙迅LT86102UX HDMI2.0 分路器具有符合 HDMI2.0/1.4 规范的 1&#xff1a;2 分路器、最大 6Gbps 高速数据速率、自适应均衡 RX 输入和预强调的 TX 输出&#xff0c;支持长电缆应用&#xff0c;板载无 XTAL&#xff0c;可节省 BOM 成本。 LT86102UX HDM…

Vue 3 基础(二)基础 1

API 参考 1、创建一个 Vue 应用 1.1 应用实例 每个 Vue 应用都是通过 createApp 函数创建一个新的 应用实例&#xff1a; import { createApp } from vueconst app createApp({/* 根组件选项 */ })1.2 根组件 我们传入 createApp 的对象实际上是一个组件&#xff0c;每个…

flink sql 13.2 读取与写入数据库的报错(踩坑)

flink sql读取与写入数据的报错&#xff08;踩坑&#xff09; flink sql sink mysql 没有数据写入或数据写入中文乱码或报useSSLflink sql source mysql 任务执行正常没有任何报错信息&#xff08;构建 Flink LookUp 表 的踩坑历程&#xff09; flink sql sink mysql 没有数据写…

哈希表的实现(哈希捅)

今天是哈希表的实现&#xff0c;哈希表也是一种数据结构&#xff0c;我个人认为还是比较简单的&#xff0c;先给大家看看我 的实现代码吧&#xff0c;如下&#xff1a; #pragma once #include <iostream> #include <set> #include <map> #include <vecto…

TCP、UDP 协议的区别,各自的应用场景

分析&回答 TCP 传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前&#xff0c;必须先在双方之间建立一个TCP连接&#xff0c;之后才能传输数据。TCP提供超时重发&#xff0c;丢弃重复数据&#xff0c;检验数据&#xff0c;流量控制等功能&…

LeetCode-93-复原IP地址

题目描述&#xff1a;有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.25…

MySQL主从分离读写复制

在高负载的生产环境里&#xff0c;把数据库进行读写分离&#xff0c;能显著提高系统的性能。下面对MySQL的进行读写分离。 试验环境 A机&#xff1a;IP:192.168.0.1 mysql版本&#xff1a;mysql-5.6.4,主数据服务器&#xff08;只写操作&#xff09; B机&#xff1a;IP:192.…