【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)
    @ResponseBody
    public 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启动项目,并修改端口名称

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Wordpress安装到win10(2024年7月)

目录 1.wordpress介绍 2下载应用 2.1.wordpress 2.2XAMPP 2.3 PHPmyadmin 3.配置应用 3.1XAMPP进程 3.2 文件配置 3.3 phpmyadmin配置 4.配置网页 4.1 数据库创建 4.2 安装wordpress 5.进入面板 6.总结 1.wordpress介绍 WordPress是一个开源内容管理系统&#xff0…

Node.js知识点总结

Node.js知识点总结 Node.js其本质和浏览器一样是一个JavaScript运行环境。浏览器的运行环境为V8引擎浏览器内置API(BOM、DOM、Canvas);而node.js的运行环境是V8引擎node提供的API(fs、path、http)。它使JavaScript可以编写后端。 基本知识 fs文件系统模块 它提供一…

C语言·分支和循环语句(超详细系列·全面总结)

前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下分支循环语句的知识点,我们一起来看看吧~ 目录 一、什么是语句&#xf…

剪画小程序:短视频搬运必备!去除视频字幕!

在这个人人都自媒体的盛世,新人想要创作爆款视频那里难上加难,所以搬运视频就成了很多新手自媒体人的不二选择。 搬运优质内容成为许多人的需求。但原视频中的字幕往往成为困扰大家的难题。 你是否曾为了搬运一个精彩的短视频,却因为无法去除…

gitee设置ssh公钥密码避免频繁密码验证

gitee中可以创建私有项目,但是在clone或者push都需要输入密码, 比较繁琐。 公钥则可以解决该问题,将私钥放在本地,公钥放在gitee上,当对项目进行操作时带有的私钥会在gitee和公钥进行验证,避免了手动输入密…

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接:[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机,得到如下页面,类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果,可以猜测php脚本命令是ping -c 4 $ip,暂时不知道执行的函数…

【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结

文章目录 文件存储存储到文件读取文件 SharedPreferences存储存储获取SharedPreferences对象Context 类的 getSharedPreferences() 方法Activity 类的 getPreferences() 方法PreferenceManager 类中的 getDefaultSharedPreferences() 方法 示例 读取记住密码的功能 SQLite数据库…

通信协议_C#实现CAN通信

CAN协议 CAN(Controller Area Network)即控制器局域网络。特点: 多主网络:网络上的任何节点都可以主动发送数据,不需要一个固定的主节点。双绞线:使用双绞线作为通信介质,支持较远的通信距离。…

挑战房市预测领头羊:KNN vs. 决策树 vs. 线性回归

挑战房市预测领头羊(KNN,决策树,线性回归) 1. 介绍1.1 K最近邻(KNN):与邻居的友谊1.1.1 KNN的基础1.1.2 KNN的运作机制1.1.3 KNN的优缺点 1.2 决策树:解码房价的逻辑树1.2.1 决策树的…

kafka服务介绍

kafka 安装使用管理 Kafka Apache Kafka 是一个开源的分布式事件流平台,主要用于实时数据传输和流处理。它最初由 LinkedIn 开发,并在 2011 年成为 Apache 基金会的顶级项目。Kafka 设计的目标是处理大规模的数据流,同时提供高吞吐量、低延迟…

shopee虾皮 java后端 一面面经 整体感觉不难

面试总结:总体不难,算法题脑抽了只过了一半,面试官点出了问题说时间到了,反问一点点,感觉五五开,许愿一个二面 1.Java中的锁机制,什么是可重入锁 Java中的机制主要包括 synchronized关键字 Loc…

SpringBoot整合elasticsearch-java

一、依赖 系统使用的是ElasticSearch8.2.0 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.0</version> </dependency> 二、配置 1、yml文件配置 elastics…

SpringBoot入门:如何新建SpringBoot项目(保姆级教程)

在本文中&#xff0c;我们将演示如何新建一个基本的 Spring Boot 项目。写这篇文章的时候我还是很惊讶的&#xff0c;因为我发现有些java的初学者&#xff0c;甚至工作10年的老员工居然并不会新建一个SpringBoot项目&#xff0c;所以特别出了一篇文章来教大家新建一个SpringBoo…

关于pycharm上push项目到gitee失败原因

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;https://blog.csdn.net/u011628215/article/details/140577821?spm1001.2014.3001.5502 前言&#xff1a;最近新建项目push上gitee都没有问题&#xff0c;但是当在gitee网站进行了一个…

基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)

构建监控平台数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示&#xff0c;运维团队可以迅速发现异常&#xff0c;优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…

CefSharp音视频编译与免费下载

注&#xff1a;Cefharp 音频和视频播放编译&#xff0c;生成相应的dll文件&#xff0c;从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例&#xff0c;您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

【Qt 】JSON 数据格式详解

文章目录 1. JSON 有什么作用?2. JSON 的特点3. JSON 的两种数据格式3.1 JSON 数组3.2 JSON 对象 4. Qt 中如何使用 JSON 呢&#xff1f;4.1 QJsonObject4.2 QJsonArray4.3 QJsonValue4.4 QJsonDocument 5. 构建 JSON 字符串6. 解析 JSON 字符串 1. JSON 有什么作用? &#x…

VIN解析汽车详情|阿里云实现调用API接口

介绍&#xff1a; 本次解析通过阿里云云市场的云服务来实现通过17位车架号来自动识别车型的详细信息&#xff0c;首先需要准备选择一家可以提供查询的商品。 https://market.aliyun.com/apimarket/detail/cmapi00065864#skuyuncode5986400001 步骤1: 选择商品 如图点击免费…

鸿蒙界面开发

界面开发 //构建 → 界面 build() {//行Row(){//列Column(){//文本 函数名(参数) 对象.方法名&#xff08;参数&#xff09; 枚举名.变量名Text(this.message).fontSize(40)//设置文本大小.fontWeight(FontWeight.Bold)//设置文本粗细.fontColor(#ff2152)//设置文本颜色}.widt…

四、GD32 MCU 常见外设介绍 (5) TIMER 模块介绍

5.1.TIMER 基础知识 TIMER分高级定时器&#xff0c;通用定时器L0&#xff0c;L1&#xff0c;L2和基本定时器。 5.2.硬件连接说明 TIMER 属于片内外设&#xff0c;对于外部硬件设计&#xff0c;只需要单独IO口外接信号线即可。 5.3.GD32 TIMER 外设原理简介&#xff08;以 G…