【spring boot】初学者项目快速练手

项目视频:一小时带你从0到1实现一个SpringBoot项目开发_哔哩哔哩_bilibili

注解视频:10、Java高级技术:注解:认识注解_哔哩哔哩_bilibili

一、基础知识

1.注解Annotation

(1)定义

注解是Java代码里的特殊标记,作用是让其他程序根据注解信息来决定怎么执行该程序

可以用在类、构造器、方法、成员变量、参数等位置处

举例:@Override表示重写,编译器可以验证@Override下面的方法名是否是父类中所有的,如果没有则报错,比如写错了方法名,不加的话会认为为子类定义了一个新方法。

(2)自定义注解

格式:

原理:

当注解中只有一个value属性时,使用注解时,value名称可以不写,直接写传入的参数

(3)元注解

含义:修饰注解的注解,一共有两个@Target和@Retention,其中使用@Target时,想要在多个位置使用,可以用逗号隔开传入多个值

2.泛型接口

二、Spging Boot简介

Spging Boot是基于Spring框架的开源框架,用于简化Spring应用程序的初始搭建和开发过程。

三、三层架构

1.API/Controller层

表示层/控制层,控制业务逻辑层Service,并把数据返回给移动端和前端,直接转发Service的业务处理结果,不能暴露Service的业务逻辑

新建一个Controller类,有两种写法:

(1)@Controller+@RequestMapping+@ResponseBody方式
@Controller
public class TestController {@RequestMapping(value = "/hello", method = RequestMethod.GET)@ResponseBodypublic String hello() {return "Hello World!";}}
(2)@RestController+@GetMapping(PostMapping、PutMapping…)方式
@RestController
public class TestController {@GetMapping("/hello")public String hello() {return "Hello World!";}}

2.Service层

业务逻辑层/服务层,存放内部的业务逻辑,比如用户的增删改查、发送验证码或邮件,对分布式部署起到重要作用

3.Data Access Object(DAO)层

数据库持久化层,就是和数据库交互,对数据库表进行增删改查

常用的实现持久化层的框架有JPA不用手写SQL,项目复杂程度一般,追求稳定,迭代速率低的可以用JPAMyBatis需要手写SQL,项目较复杂,需求变更频繁,迭代速度快的可以用MyBatis

对象关系映射(Object Relational Mapping,简称ORM)是将数据库表与java实体对象做一个映射

4.数据库

四、代码结构

1.生成主程序

(1)在官网下载

Spring Initializr

选好需求模块,快速生成一个Spring Boot项目初始的代码,会生成一个demo文件

打开intellj idea,导入demo文件

(2)直接在intellj idea中创建

IDEA使用Spring Initializer快速创建Spring Boot项目(超详细)_idea springinitializer-CSDN博客

2.目录结构

文件夹/文件说明
src-main-resources保存前端的静态文件或者配置文件, js css images
src-main-java保存源码
pom.xml项目对象模型,是Maven项目的核心配置文件,定义了项目的所有属性,包括项目的名称、版本、依赖关系、构建配置等,轻松管理项目的构建和依赖关系
src-main-resources-application.propertiesSpring Boot应用的配置文件,可以修改一些默认设置

3.运行

(1)运行BootDemoApplication

有main方法

需要先把JPA的依赖注释掉,然后打开localhost:8080验证是否配置成功

(2)@RestController创建API

新建一个Controller类,访问地址设置为:http://localhost:8080/hello

也可以返回list对象

(3)REST(RESTful) API 规范

表现层状态转化接口:可以使前后端解耦更彻底

  • 将一切数据(对象的单个实例)视作资源,每个网址(看URL)代表资源的位置(resource)
  • 利用HTTP请求方式(看Method),描述对资源的操作(增删改查)
  • 通过HTTP响应状态码(看Response Code),描述对资源的操作结果(如200/5xx)

客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化":

URL只能使用名词,不能使用动词:

五、项目开发(自下而上)

从数据库层依次往上层构建

1.创建数据库表

初始化数据库,添加数据

中配置数据库

2.构建Data Access层

在pom.xml中引入JPA依赖,需要用到JPA的注解

新建一个package:dao

在package中新建一个类:Student,查询数据库,并将数据库中的数据表映射为面向对象的类

注解说明
@Entity定义该类将会成为被JPA管理的实体类,只有一个属性name,表示其所对应的数据库中的表名,可以省略
@Table当实体类与其映射的数据库表名不同名时需要使用 @Table注解说明,该标注与 @Entity 注解并列使用
@ID用于标识实体类中的主键字段,用于在数据库中唯一地标识一个实体
@Column用来标识实体类中属性与数据表中字段对应关系,此例中属性和字段名相同
@GeneratedValue用来表明主键的生成策略,其中strategy = DENTITY表示主键自增长

在package中新建一个Interface:StudentRepository,作为data access层

注解说明
@Repository修饰哪个类表明这个类具有对数据库CRUD(增删改查)的功能,用在持久层的接口上,实际上就是用来标注DAO层

3.构建Service层

新建一个package:service

在package中新建一个Interface:StudentService

在package中新建一个类:StudentServiceImpl,实现StudentService

注解说明
@Service标记当前类是一个service类,将当前类自动注入到Spring容器中
@Autowired直接应用于类的成员变量上,Spring 容器会自动为这些变量找到与其类型匹配的 Bean 实例,并进行注入

4.构建API层

新建一个package:controller

在package中新建一个类:StudentController

注解说明
@PathVariable可用于处理请求 URI 映射中的模板变量,并将其绑定到 Controller 方法参数
@GetMapping可以用于类和方法上,用于定义HTTP GET请求的URL路径

5.运行

可以返回数据库的结果

六、项目优化

1.不直接返回整个数据库对象,只返回需要展示给前端的对象

新建一个StudentDTO类,返回id name 

修改StudentService

新建一个类:StudentConverter,将数据库对象转化为返回给前端的DTO对象

修改StudentServiceImpl类

新建一个Response类,返回异常

修改StudentController

运行返回结果

七、新增Post接口

在StudentController中添加

在StudentRepository中添加,Email不同才能添加成功

在StudentCoverter中添加

在StudentService中添加

在StudentServiceImpl中添加

八、删除Delet接口

在StudentController中添加

在StudentService中添加

在StudentServiceImpl中添加

九、更新Put接口

在StudentController中添加

在StudentService中添加

在StudentServiceImpl中添加

十、打包项目

目录中生成包

可以通过java -jar启动项目,并修改端口名称

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

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

相关文章

Golang | Leetcode Golang题解之第257题二叉树的所有路径

题目: 题解: func binaryTreePaths(root *TreeNode) []string {paths : []string{}if root nil {return paths}nodeQueue : []*TreeNode{}pathQueue : []string{}nodeQueue append(nodeQueue, root)pathQueue append(pathQueue, strconv.Itoa(root.V…

干货-并发编程提高——线程切换基础(一)

现在的时分(time-sharing)多任务(multi-task)操作系统架构通常都是用所谓的“时间分片(time quantum or time slice)”方式进行抢占式(preemptive)轮转调度(round-robin式…

HydraRPC: RPC in the CXL Era——论文阅读

ATC 2024 Paper CXL论文阅读笔记整理 问题 远程过程调用(RPC)是分布式系统中的一项基本技术,它允许函数在远程服务器上通过本地调用执行来促进网络通信,隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…

【iOS】内存五大分区

目录 堆(Heap)是什么五大分区栈区堆区全局/静态区常量区(即.rodata)代码区(.text) 函数栈堆和栈的区别和联系图解 OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会有很大帮助。C语言…

PHP接入consul,注册服务和发现服务【学习笔记】

PHP接入consul,注册服务和发现服务 consul安装 链接: consul安装 启动consul C:\Users\14684>consul agent -dev安装TP5 composer create-project topthink/think5.0.* tp5_pro --prefer-dist配置consul 创建tp5_pro/application/service/Consul.php <?php /*****…

《昇思25天学习打卡营第25天|文本解码原理--以MindNLP为例》

文本解码是自然语言处理&#xff08;NLP&#xff09;中的一个关键步骤&#xff0c;用于将模型生成的向量表示转化为可读的文本。 文本解码的基本原理 在 NLP 中&#xff0c;解码过程通常从模型输出的概率分布或嵌入向量开始&#xff0c;通过某种策略将这些概率或嵌入转化为…

html改写vue日志

本人最近学了vue&#xff0c;想着练手的方法就是改写之前在公司开发的小系统前端&#xff0c;将前端的AJAXJSThymeleaf改为axiosvue。 改写html 将<html>中的<head>和<body>结构移除&#xff0c;将css部分移入<style>&#xff0c; 重新定义了全局的&…

《昇思25天学习打卡营第21天|Pix2Pix实现图像转换》

Pix2Pix 是一种图像转换模型&#xff0c;使用条件生成对抗网络&#xff08;Conditional Generative Adversarial Networks&#xff0c;cGANs&#xff09;实现图像到图像的转换。它主要由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…

【Linux】深入探索`cp`命令:文件复制的全面指南

文章目录 一、cp命令概述二、cp命令的基本用法1. 复制单个文件2. 复制多个文件到目录 三、cp命令的常用选项1. -i&#xff1a;交互式复制&#xff08;interactive&#xff09;2. -r或-R&#xff1a;递归复制目录&#xff08;recursive&#xff09;3. -v&#xff1a;详细模式&am…

DAY05 CSS

文章目录 1 CSS选择器(Selectors)8. 后代(包含)选择器9. 直接子代选择器10. 兄弟选择器11. 相邻兄弟选择器12. 属性选择器 2 伪元素3 CSS样式优先级1. 相同选择器不同样式2. 相同选择器相同样式3. 继承现象4. 选择器不同权值的计算 4 CSS中的值和单位1. 颜色表示法2. 尺寸表示法…

2024.7.22 作业

1.将双向链表和循环链表自己实现一遍&#xff0c;至少要实现创建、增、删、改、查、销毁工作 循环链表 looplinklist.h #ifndef LOOPLINKLIST_H #define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node {union {int len;datatype data;}…

41 QOS技术(服务质量)

1 QOS 产生背景 对于网络业务&#xff0c;影响服务质量的因素包括传输的带宽、传送的时延、数据的丢包率等。网络资源总是有限的&#xff0c;只要存在抢夺网络资源的情况&#xff0c;就会出现服务质量的要求网络总带宽固定的情况下&#xff0c;如果某类业务占用的带宽越多&am…

2024导游资格考试,这些材料提前准备✅

2024年导游考试报名本月开始&#xff01; &#x1f499;大家提前准备好报名材料 1、个人近期白底1寸证件照。 2、身份证照片 3、学历照片 4、健康证明或健康承诺书 5、其他需要上传的材料 &#x1f499;照片文件不通过原因汇总&#xff0c;记得避开这些坑&#xff01; &#x1…

深入浅出理解 C 语言中的 qsort 函数

目录 引言 一、什么是qsort 二、函数原型 1.qsort函数 2.比较函数 三、qsort函数使用示例 1.使用qsort排序整形数据 2.使用qsort排序结构数据 总结 引言 在编程中&#xff0c;排序是一个常见且重要的操作。C 语言标准库提供了一系列排序函数&#xff0c;其中 qsort 函…

嵌入式C++、STM32、树莓派4B、OpenCV、TensorFlow/Keras深度学习:基于边缘计算的实时异常行为识别

1. 项目概述 随着物联网和人工智能技术的发展,智能家居安全系统越来越受到人们的关注。本项目旨在设计并实现一套基于边缘计算的智能家居安全系统,利用STM32微控制器和树莓派等边缘设备,实时分析摄像头数据,识别异常行为(如入侵、跌倒等),并及时发出警报,提高家庭安全性。 系…

HALSTM32 SPI/ABZ/PWM方式读取MT6816磁编码器数据

HALSTM32 SPI方式读取MT6816磁编码器数据 &#x1f4da;MT6816相关资料&#xff08;来自商家的相关资料&#xff09;&#xff1a; 资料&#xff1a;https://pan.baidu.com/s/1CAbdLBRi2dmL4D7cFve1XA?pwd8888 提取码&#xff1a;8888&#x1f4cd;驱动代码编写&#xff0c;可…

【HarmonyOS】HarmonyOS NEXT学习日记:六、渲染控制、样式结构重用

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;六、渲染控制、样式&结构重用 渲染控制包含了条件渲染和循环渲染&#xff0c;所谓条件渲染&#xff0c;即更具状态不同&#xff0c;选择性的渲染不同的组件。 而循环渲染则是用于列表之内的、多个重复元素组成的结构中。 …

yolo5图片视频、摄像头推理demo

yolo5图片、视频推理demo 图片 import torch# 加载预训练模型 model torch.hub.load(./yolo5, custom, pathyolov5s.pt, sourcelocal)# 加载图片 img 1.jpg# 进行推理 results model(img)# 解析结果 detections results.xyxy[0].cpu().numpy() # [x1, y1, x2, y2, confid…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel 简介熔断降级什么是熔断什么是降级相同点不同点 整合Sentinel自定义sentinel流控返回数据使用Sentinel来保护feign远程调用自定义资源给网关整合Sentinel参考 简介 熔断降…

C++的UI框架和开源项目介绍

文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目&#xff1a;QGIS&#xff08;地理信息系统&#xff09; https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目&#xff1a;filezilla https://svn.filezilla-project.org/svn/ wxWidg…