SpringBoot ——简单开发流程实战

        本文使用SpringBoot进行电商系统商品数据增删改查的简单开发流程。

本文目录

      • 一、创建Spring Boot项目
      • 二、配置数据库连接
      • 三、创建实体类
      • 四、创建Repository接口
      • 五、创建Service层
      • 六、创建Controller层
      • 七、测试

一、创建Spring Boot项目

可以通过https://start.spring.io/或者IDEA创建,需添加对应的依赖

 <!-- JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

在这里插入图片描述


二、配置数据库连接

src/main/resources 目录下找到 application.properties 文件,添加数据库连接配置,用户名和密码自行修改:

spring.datasource.url=jdbc:mysql://localhost:3306/ecommerce?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=用户名
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true



三、创建实体类

src/main/java 目录下创建实体类 Product,用于表示商品数据:

package com.example.ecommerceproduct.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Product {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private double price;private String description;// 无参构造函数public Product() {}// 有参构造函数public Product(String name, double price, String description) {this.name = name;this.price = price;this.description = description;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}
}

这里可以使用lombok简化实体类

实体对应sql

CREATE TABLE IF NOT EXISTS Product (-- 商品IDid BIGINT AUTO_INCREMENT PRIMARY KEY,-- 商品名称name VARCHAR(255) NOT NULL,-- 商品价格price DECIMAL(10, 2) NOT NULL,-- 商品描述description char(255)
);

并且预制了一些数据:
在这里插入图片描述


四、创建Repository接口

创建 ProductRepository 接口,用于与数据库进行交互:

package com.example.ecommerceproduct.repository;import com.example.ecommerceproduct.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;public interface ProductRepository extends JpaRepository<Product, Long> {
}



五、创建Service层

创建 ProductService 类,处理业务逻辑:

package com.example.ecommerceproduct.service;import com.example.ecommerceproduct.entity.Product;
import com.example.ecommerceproduct.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Optional;@Service
public class ProductService {@Autowiredprivate ProductRepository productRepository;// 添加商品public Product addProduct(Product product) {return productRepository.save(product);}// 获取所有商品public List<Product> getAllProducts() {return productRepository.findAll();}// 根据ID获取商品public Optional<Product> getProductById(Long id) {return productRepository.findById(id);}// 更新商品信息public Product updateProduct(Long id, Product updatedProduct) {return productRepository.findById(id).map(product -> {product.setName(updatedProduct.getName());product.setPrice(updatedProduct.getPrice());product.setDescription(updatedProduct.getDescription());return productRepository.save(product);}).orElse(null);}// 删除商品public void deleteProduct(Long id) {productRepository.deleteById(id);}
}



六、创建Controller层

创建 ProductController 类,处理HTTP请求:

package com.example.ecommerceproduct.controller;import com.example.ecommerceproduct.entity.Product;
import com.example.ecommerceproduct.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import java.util.List;
import java.util.Optional;@RestController
@RequestMapping("/api/products")
public class ProductController {@Autowiredprivate ProductService productService;// 添加商品@PostMappingpublic ResponseEntity<Product> addProduct(@RequestBody Product product) {Product savedProduct = productService.addProduct(product);return new ResponseEntity<>(savedProduct, HttpStatus.CREATED);}// 获取所有商品@GetMappingpublic ResponseEntity<List<Product>> getAllProducts() {List<Product> products = productService.getAllProducts();return new ResponseEntity<>(products, HttpStatus.OK);}// 根据ID获取商品@GetMapping("/{id}")public ResponseEntity<Product> getProductById(@PathVariable Long id) {Optional<Product> product = productService.getProductById(id);return product.map(value -> new ResponseEntity<>(value, HttpStatus.OK)).orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));}// 更新商品信息@PutMapping("/{id}")public ResponseEntity<Product> updateProduct(@PathVariable Long id, @RequestBody Product updatedProduct) {Product product = productService.updateProduct(id, updatedProduct);if (product != null) {return new ResponseEntity<>(product, HttpStatus.OK);} else {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}}// 删除商品@DeleteMapping("/{id}")public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {productService.deleteProduct(id);return new ResponseEntity<>(HttpStatus.NO_CONTENT);}
}



七、测试

启动Spring Boot应用程序,访问以下接口进行测试:
http://localhost:8080/api/products
在这里插入图片描述

可以看到操作的数据了,这样就完成了一个简单的Spring Boot电商系统商品数据增删改查的开发了,当然可以根据这些自行扩展需要实现的功能。


← 上一篇 Java进阶——Stream流以及常用方法详解
记得点赞、关注、收藏哦!
下一篇 Java进阶——注解一文全懂 →

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

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

相关文章

fastadmin 后台商品sku(vue)

先上个效果图 首先先引入vue define([backend], function (Backend) {require.config({paths: {vue: /assets/jeekshopskugoods/libs/vue.min,skuimg: /assets/jeekshopskugoods/js/skuimg,skugoods: /assets/jeekshopskugoods/js/skugoods,layui: /assets/LayuiSpzj/layui/la…

LeetCode 718 - 最长重复子数组

LeetCode 718 - 最长重复子数组 是一个典型的数组和字符串问题&#xff0c;适合考察动态规划、滑动窗口和二分查找等多种编程能力。掌握其多种解法及变体能够有效提高处理字符串和数组算法的能力。 题目描述 输入: 两个整数数组 nums1 和 nums2。输出: 两个数组中存在的最长的…

LeetCode 0132.分割回文串 II:动态规划

【LetMeFly】132.分割回文串 II&#xff1a;动态规划 力扣题目链接&#xff1a;https://leetcode.cn/problems/palindrome-partitioning-ii/ 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回符合要求的 最少分割次数 。 示例 …

iOS 实现UIButton自动化点击埋点

思路&#xff1a;我们HOOK UIControl的 addtarget:action:forControlEvents方法&#xff0c;交换UIControl的 addtarget:action:forControlEvents 方法的实现&#xff0c; 在交换的方法中添加原来响应的同时&#xff0c;再添加一个埋点响应&#xff0c;该响应方法实现了点击埋点…

C++蓝桥杯基础篇(六)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来一起学习蓝桥杯基础篇&#xff08;六&#xff09;&#xff0c;练习相关的数组习题&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 第1题 数组的左方区域 这道题&#xff0c;实质上是找规律&#xff0c;…

git -学习笔记

目录 基本操作语法 设置用户和邮箱 版本回退 工作区和暂存区 撤销修改 删除与恢复 一工作区删除了&#xff0c;但是暂存区没删除 二工作区误删了&#xff0c;暂存区还有 github-Git 连接 报错解决-push远程仓库被拒绝 远程库 分支 分支冲突 储藏分支 回到当前分…

Windows本地Docker+Open-WebUI部署DeepSeek

最近想在自己的电脑本地部署一下DeepSeek试试&#xff0c;由于不希望污染电脑的Windows环境&#xff0c;所以在wsl中安装了ollama&#xff0c;使用ollama拉取DeepSeek模型。然后在Windows中安装了Docker Desktop&#xff0c;在Docker中部署了Open-WebUI&#xff0c;最后再在Ope…

力扣785. 判断二分图

力扣785. 判断二分图 题目 题目解析及思路 题目要求将所有节点分成两部分&#xff0c;每条边的两个端点都必须在不同集合中 二分图&#xff1a;BFS/DFS/并查集 因为图不一定联通&#xff0c;所以枚举所有点都做bfs(如果没联通的话) 代码 class Solution { public:bool is…

springboot之集成Elasticsearch

目录 二、Elasticsearch 是什么&#xff1f;三、Elasticsearch 安装四、Springboot 集成 Elasticsearch 的方式五、创建项目集成 Elasticsearch 2.创建 Spring Initializr 项目 es &#xff08;3&#xff09;.新建实体类 User&#xff08;4&#xff09;.新建 dao 接口类 UserR…

[Lc滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数

目录 1. 长度最小的字数组 题解 代码 ⭕2.无重复字符的最长子串 题解 代码 3.最大连续1的个数 III 题解 代码 4.将 x 减到 0 的最小操作数 题解 代码 1. 长度最小的字数组 题目链接&#xff1a;209.长度最小的字数组 题目分析: 给定一个含有 n 个 正整数 的数组…

数据集笔记:新加坡 地铁(MRT)和轻轨(LRT)票价

数据连接 data.gov.sg 2024 年 12 月 28 日起生效的新加坡地铁票价 该数据集包含 MRT 和 LRT 票价的信息&#xff0c;包括&#xff1a; 票价类型&#xff08;Fare Type&#xff09;&#xff1a;成人票、学生票、老年人票、残障人士票等。适用时间&#xff08;Applicable Tim…

湘潭大学计算机复试详细攻略(调剂)

一&#xff0c;写在前面的话 ① 首先&#xff0c;能完成考试初试来到这里的都是勇士。不管结果如何&#xff0c;不管成绩如何。我都在这里真心的祝福你以后一帆风顺。 ② 目前学历贬值严重&#xff0c;如果是成绩不理想的话&#xff0c;我建议能工作就去工作&#xff0c;工作不…

【前端基础】Day 3 CSS-2

目录 1. Emmet语法 1.1 快速生成HTML结构语法 1.2 快速生成CSS样式语法 2. CSS的复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类选择器 2.4.1 链接伪类选择器 2.4.2 focus伪类选择器 2.5 复合选择器总结 3. CSS的元素显示模式 3.1 什么是元素显示…

不同数据类型在数据库和编程语言之间的对应关系表

不同数据类型在数据库和编程语言之间的对应关系表 MySql 与 C# MySqlC#varcharstringbigintlongbigint unsignedulongintintint unsigneduintsmallintshortsmallint unsignedushortVARCHAR(36)GuidsmalldatetimeDateTimedateDateTimedatetimeDateTimetimestampDateTimefloatf…

RabbitMQ操作实战

1.RabbitMQ安装 RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang&#xff1a;http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340 Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exch…

DeepSeek教unity------UI元素长按响应

主要功能说明&#xff1a; ​长按检测&#xff1a;通过记录指针按下的时间&#xff0c;判断是否达到 longClickTime&#xff0c;从而触发长按事件。​状态管理&#xff1a;使用 StateEnum 枚举管理点击项的当前状态&#xff08;未按下、按下等待长按、长按已触发&#xff09;。…

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第2章OpenHarmony v3.2-Beta4版本测试

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)

简介: 这个小车的芯片是STM32F103C8T6&#xff0c;其他的芯片也可以照猫画虎,基本配置差不多,要注意的就是,管脚复用,管脚的特殊功能,(这点不用担心,hal库每个管脚的功能都会给你罗列,很方便的.)由于我做的比较简单,只是用到了几个简单外设.主要是由带霍尔编码器电机的车模,电机…

SQL命令详解之操作数据库

操作数据库 SQL是用于管理和操作关系型数据库的标准语言。数据库操作是SQL的核心功能之一&#xff0c;主要用于创建、修改和删除数据库对象&#xff0c;如数据库、表、视图和索引等。以下是SQL中常见的数据库操作命令及其功能简介&#xff1a; 1. 查询数据库 查询所有的数据库…

Go红队开发—编解码工具

文章目录 开启一个项目编解码工具开发Dongle包Base64编解码摩斯密码URL加解密AES加解密 MD5碰撞工具开发 开启一个项目 这作为补充内容&#xff0c;可忽略直接看下面的编解码&#xff1a; 一开始用就按照下面的步骤即可 1.创建一个文件夹&#xff0c;你自己定义名字(建议只用…