当前位置: 首页 > news >正文

梧州本地网站/推广关键词优化公司

梧州本地网站,推广关键词优化公司,wordpress首页位置,做北美市场用哪个网站引言:欢迎各位点击收看本篇博客,在历经很多的艰辛,我也是成功由小白浅浅进入了入门行列,也是收货到很多的知识,每次看黑马的JavaWeb课程视频,才使一个小菜鸡见识到了Java前后端是如何进行交互访问的&#x…

引言:欢迎各位点击收看本篇博客,在历经很多的艰辛,我也是成功由小白浅浅进入了入门行列,也是收货到很多的知识,每次看黑马的JavaWeb课程视频,才使一个小菜鸡见识到了Java前后端是如何进行交互访问的,话不多说,进入正题。


目录

一.三层框架:

二.前后端交互过程:

 三.如何进行接口测试:

 四.三层架构的设计模式:

五.正式入门三层框架:

1.首先要写controller层:

2.service层的写法:

3.dao层的写法:


 

一.三层框架:

我们在进行程序开发时,应该遵守单一职责原则,意思就是尽可能让每个接口、类、方法的职责更单一,如果我们将整个后端代码放在一个包一个类中,不仅仅是代码的可阅读性差,而且代码冗杂,耦合度很高。

1. controller:控制层,负责接受前端发送来的请求,对请求进行处理,并相应数据。

2. service:业务逻辑层,处理具体实现的业务逻辑。

3. dao:数据访问层(持久层),负责数据访问操作,包括数据的增删改查。

二.前后端交互过程:

首先通过浏览器发起请求,经过DispatcherServlet(称为核心控制器或者前端控制器)将请求信息封装到HttpServletRequest这个对象内,然后再将这个请求转给后面的每个Controller程序,由Controller程序对其进行处理(Controller程序通过调用Service程序,然后再Service程序中调用Mapper程序,最后Mapper程序处理完返回给Service然后再返回给Controller),随后Controller程序将处理完的响应信息返回给DispatcherServlet的HttpServletResponse对象中,然后DispatcherServlet再给浏览器响应数据。这也就是BS架构,浏览器/服务器架构模式。

 三.如何进行接口测试:

我们在写完后端程序肯定需要进行测试来判断代码的准确性,但是如果我们没有前端页面进行测试,我们如何进行接口测试呢?这个时候就需要使用Postman或者Apifox来进行接口测试。

 四.三层架构的设计模式:

根据第一与第二点,我们初步理解了三层框架的进行顺序,那么三层框架该是什么样的创建形式呢?

根据上图,我们可以看到这个是基于Springboot来开发的,在java.com.itheima包下创建了四个包以及运行类,而这四个包分别装有其分别对应的类与接口。 

我们都知道接口是Java程序对类定义其规则,所以一般我们在开发的时候会现在接口内写入想要实现的方法名,然后再实现类中写出实现方法。 

五.正式入门三层框架:

在学习三层框架,我们都知道三层框架有controller,service,dao三层,所以咱们在写接口的过程要按照其实现顺序依次写入。

我们先在pom.xml导入依赖以及在application.properties中写入MySQL的驱动以及配置文件的相关信息,,然后在tlias数据库下创建一个Dept部门类和一个Emp员工类。

pom.xml文件导入依赖:1.Springboot 2.MySQL 3.Lombok 4.pagehelper(分页插件)

application.properties配置文件写法:

spring.application.name=tliasspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/tliasspring.datasource.username=rootspring.datasource.password=lxs15241690479mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplmybatis.configuration.map-underscore-to-camel-case=true

1.首先要写controller层:

我们在写controller层之前要知道SpringBoot对注解的使用:

1. @ResponseBody:放在开头代表每个方法的返回值都会作为响应数据,如果是对象或者集合会先转为json格式然后再来响应。

2. @Controller:控制器组件

3. @RestController:主要由ResponseBody+Controller两个注解组成,也就会有这两个注解的作用。

4. @RequestMapping("url"):一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。

5. @***Mapping:这***是代表其有很多的样式,也就是要填入请求方式,如:Get,Post,Delete等。跟@RequestMapping差不多,但是使用这个注解就要跟随该注解前的请求方式才能够请求。

6. @RequestParam:

 用于将指定的请求参数赋值给方法中的形参。

有三个属性:
(1)value:请求参数名(必须配置)

(2)required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)

(3)defaultValue:设置默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)

7.@PathVariable:

    @PathVariable是Rest风格衍生出的占位符,只支持一个属性value,类型是为String,代表绑定的属性名称。默认不传递时,绑定为同名的形参。 用来便捷地提取URL中的动态参数。应用时,在@RequestMapping请求路径中,将需要传递的参数用花括号{}括起来,然后,通过@PathVariable("参数名称")获取URL中对应的参数值。如果@PathVariable标明参数名称,则参数名称必须和URL中参数名称一致。

8. @Autowired:自动注入,上一篇Mybatis讲过,这里不细说。有需要了解请跳转:

Mybatis不明白?就这一篇带你轻松入门_mapper 新建一张表在哪里配置-CSDN博客

下面将@RequestBody放在前面的目的是为了简化写法,因为下面的@***Mapping()内都需要加上某url所以我们可以将/depts提前来简化写法,所以下面那个@GetMapping后面不是没有接口地址而是因为简化写法省略。

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {@Autowiredprivate DeptService deptService;@GetMappingpublic Result list(){log.info("查询全部部门数据");List<Dept> deptList = deptService.list();return Result.success(deptList);}@DeleteMapping("/{id}")  //动态接收数据public Result delete(@PathVariable Integer id){log.info("根据id删除部门:{}" + id);deptService.delete(id);return Result.success();}@PostMappingpublic Result add(@RequestBody Dept dept){//json格式使用实体类接受log.info("新增部门:{}" , dept);deptService.add(dept);return Result.success();}}

有时我们为了接受大量的数据也会定义一个实体类然后使用@RequestBody注解进行接收。

然后我们在这些Controller程序的方法看见其内部紧跟随调用其对应的Service方法来操作所接收的数据,随后return返回一个Result类success方法。下面的是Result类->

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {private Integer code;//响应码,1 代表成功; 0 代表失败private String msg;  //响应信息 描述字符串private Object data; //返回的数据//增删改 成功响应public static Result success(){return new Result(1,"success",null);}//查询 成功响应public static Result success(Object data){return new Result(1,"success",data);}//失败响应public static Result error(String msg){return new Result(0,msg,null);}
}

上面的三个注解不懂的可以看我上篇文章,里面详细写出了Mybatis的相关内容。

 既然我们会调用service进行操作,所以接下来我们就进行service的操作。

2.service层的写法:

@Service:Spring Framework 中的一种注解,它标识了这个类是一个业务逻辑层的服务 Bean。这意味着当 Spring 应用启动时,该 Bean 会被自动创建并加入到 Spring 应用上下文中。简而言之,@Service 注解是一种用于标记服务层 Bean 的注解,是在 Spring Boot 应用中实现业务逻辑复用的重要方法之一。

业务逻辑层,处理具体实现的业务逻辑(处理数据),我们需要再其内部加上很多的操作方法所以先写接口后写类。

接口内写入规则:

public interface DeptService {List<Dept> list();void delete(Integer id);void add(Dept dept);
}

然后创建其实体类:

@Service
public class DeptServiceImpl implements DeptService {@Autowiredprivate DeptMapper deptMapper;@Overridepublic List<Dept> list() {return deptMapper.list();}@Overridepublic void delete(Integer id) {deptMapper.deleteById(id);}@Overridepublic void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.insert(dept);}
}

我们发现这层的方法体内代码非常的少,是不是可以直接与Mapper合并一层?

nonono,绝对不行的,这样会破坏原本三层架构的完整与独立性,而且三层架构低耦合,并且其注解的独立使用也无法让你变成两层架构,其实这个只是当前的代码不用写很多代码,如果咱们以后写大程序就可以看出service层的重要,每一层都是不可缺少的。

3.dao层的写法:

对于dao层,主要通过注解或者xml来操作数据,这里需要用到Mybatis的基础,详情请看下面链接,有我码一万四千多字的博客:Mybatis不明白?就这一篇带你轻松入门_mapper 新建一张表在哪里配置-CSDN博客

@Mapper
public interface DeptMapper {@Select("select * from dept")List<Dept> list();@Delete("delete from dept where id = #{id}")void deleteById(Integer id);@Insert("insert into dept(name, create_time, update_time) value (#{name} , #{createTime} , #{updateTime})")void insert(Dept dept);
}

随后我们点击执行类运行程序,然后使用Postman或者Apifox进行测试接口,同时也要注意请求方式的使用以及路径的正确书写,我们一般写成localhost:8080/depts/......,剩下的就由你来完成了。


最后,我们可以看出三层框架很简单,但是内部用到了很多知识点,这就需要咱们多学多练多观察,别忘了点个关注,多多支持,记得三连哈,有问题欢迎在评论区里留言。

相关文章:

Java三层框架的解析

引言&#xff1a;欢迎各位点击收看本篇博客&#xff0c;在历经很多的艰辛&#xff0c;我也是成功由小白浅浅进入了入门行列&#xff0c;也是收货到很多的知识&#xff0c;每次看黑马的JavaWeb课程视频&#xff0c;才使一个小菜鸡见识到了Java前后端是如何进行交互访问的&#x…...

算法设计与分析 笔记

截图摘自湖南大学彭鹏老师的ppt。笔记也是根据他的ppt整理的。 动态规划 核心 用数组记录中间结果&#xff0c;避免重复计算 三角数塔问题 问题描述 给定一个三角形数塔&#xff0c;从顶部出发&#xff0c;每次只能移动到下一行的相邻元素。要求找到一条路径&#xff0c;…...

mapreduce的工作原理

mapreduce的工作原理 MapReduce是一种编程模型&#xff0c;用于处理大规模数据集的并行运算。它的核心思想是"分而治之"&#xff0c;即把一个大数据集分解成多个小块&#xff0c;由多个处理单元并行处理&#xff0c;然后再将结果合并以得到最终结果。MapReduce模型包…...

vue中v-bind和v-model有什么区别

在Vue.js中&#xff0c;v-bind和v-model都是指令&#xff0c;用于实现数据和DOM元素之间的双向绑定&#xff0c;但它们的使用场景和功能有所区别。 v-bind: v-bind是一个通用指令&#xff0c;用于动态地绑定一个或多个属性&#xff0c;或者一个组件prop到表达式。它可以绑定任何…...

基于SpringBoot和PostGIS的某国基地可视化实战

目录 前言 一、Java后台开发设计与实现 1、模型层实现 2、控制层设计 二、WebGIS界面实现 1、列表界面的定义 2、全球基地可视化 三、成果展示 1、全球部署情况 2、亚太地区 3、欧洲基地分布 4、中东的部署 四、总结 前言 在之前的博客中&#xff0c;我们曾经对漂亮…...

为什么Linux服务器空间充足而实际上空间已满的原因

以下是一个典型的Linux服务器的磁盘空间使用情况表&#xff0c;展示了不同文件系统的大小、已用空间、可用空间和挂载点等信息 磁盘空间表的基本组成 Linux服务器的磁盘空间使用情况通常通过df命令查看&#xff0c;输出的表格包含以下几列&#xff1a; Filesystem&#xff1a…...

【LC刷题】DAY16:530 501 236

【LC刷题】DAY16&#xff1a;530 501 236 文章目录 【LC刷题】DAY16&#xff1a;530 501 236530. 二叉搜索树的最小绝对差 [link](https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/)501.二叉搜索树中的众数236. 二叉树的最近公共祖先 [link](htt…...

Vue 3 的 Teleport 组件实现跨层级通信

突破组件边界 - 使用 Vue 3 的 Teleport 组件实现跨层级通信 你可能已经熟悉了组件的基本概念:每个组件都是一个独立的单元,拥有自己的模板、样式和逻辑。但是,有时候我们需要在不同层级的组件之间进行交互,这就需要用到 Vue 3 中新引入的 Teleport 组件。 Teleport 组件可以…...

chromadb

Chroma是一款AI开源向量数据库&#xff0c;用于快速构建基于LLM的应用&#xff0c;支持Python和Javascript语言。具备轻量化、快速安装等特点&#xff0c;可与Langchain、LlamaIndex等知名LLM框架组合使用。 官网&#xff1a; https://www.trychroma.com/ https://docs.trychr…...

Gradle 自动化项目构建-Gradle 核心之 Project

一、前言 从明面上看&#xff0c;Gradle 是一款强大的构建工具&#xff0c;但 Gradle 不仅仅是一款强大的构建工具&#xff0c;它更像是一个编程框架。Gradle 的组成可以细分为如下三个方面&#xff1a; groovy 核心语法&#xff1a;包括 groovy 基本语法、闭包、数据结构、面…...

简单介绍 Kamailio cfg_rpc 模块

记得先加载 cfg_rpc 模块 loadmodule "cfg_rpc.so" kamailio 起来之后 运行 kamcmd cfg.list 可以得到&#xff1a; dispatcher: probing_threshold dispatcher: inactive_threshold dispatcher: ping_reply_codes rtpengine: rtpengine_disable_tout rtpengine: a…...

Windows 根据github上的环境需求,安装一个虚拟环境,安装cuda和torch

比如我们在github上看到一个关于运行环境的需求 Installation xxx系统Python 3.xxx CUDA 9.2PyTorch 1.9.0xxxxxx 最主要的就是cuda和torch&#xff0c;这两个会卡很多环境的安装。 我们重新走一遍环境安装。 首先创建一个虚拟环境 conda create -n 环境名字 python3.xxx…...

LeetCode 179. 最大数

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡&#xff0c;更多解法等你一起来参与哦&#xff01; LeetCode 179. 最大数&#xff0c;难度中等。 排序 解题思路&#xff1a;现将 int 类型转成 str 类型&#xff0c;然后进行字符串比较&#xff0c…...

基于Java+SpringBoot+vue+elementui药品商城采购系统详细设计实现

基于JavaSpringBootvueelementui药品商城采购系统详细设计实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种…...

Pikachu靶场--文件上传

参考借鉴 Pikachu靶场之文件上传漏洞详解_皮卡丘文件上传漏洞-CSDN博客 文件上传漏洞&#xff1a;pikachu靶场中的文件上传漏洞通关_pikachu文件上传通关-CSDN博客 client check 在桌面新建一个文件夹&#xff0c;准备一个hello.php文件&#xff0c;文件写入如下代码 <?p…...

突破架构瓶颈:克服软件系统中的漂移和侵蚀

一种常见但不完美的比喻是将软件系统中的架构漂移和侵蚀与物理建筑的架构相比。虽然这个比喻很直观&#xff0c;但它存在一个根本性的误解&#xff0c;这也常常引发软件开发中的架构问题。 试想一下&#xff0c;一个设计良好的摩天大楼或房屋建成后&#xff0c;我们期望它基本保…...

每日练题(py,c,cpp).6_19,6_20

检验素数 from math import sqrt a int(input("请输入一个数&#xff1a;")) for i in range(2,int(sqrt(a))):if a%i 0:print("该数不是素数")breakelse: print("该数是素数")# # 1既不是素数也不是合数 # #可以用flag做标志位 # b int(…...

居中显示-css样式

在微信小程序中&#xff0c;要让一个盒子&#xff08;子元素&#xff09;在另一个盒子&#xff08;父元素&#xff09;内部居中显示&#xff0c;可以使用以下几种方法&#xff1a; 1. 使用 Flex 布局 微信小程序支持使用类似于 CSS Flexbox 的布局方式。以下是使用 Flex 布局的…...

生骨肉冻干喂猫比较好?热门、口碑好、值得入手生骨肉冻干力荐

随着科学养猫的普及&#xff0c;生骨肉冻干喂养越来越受欢迎&#xff0c;生骨肉冻干喂养对猫的好处很多&#xff0c;它符合猫咪的天性&#xff0c;可以提供全面的营养&#xff0c;保持牙齿和牙龈的健康&#xff0c;还有助于维持健康的消化系统。虽然许多猫主人看到了生骨肉冻干…...

【安卓13 源码】RescueParty救援机制

RescueParty机制正是在这个背景下诞生的&#xff0c;当它注意到系统或系统核心组件陷入循环崩溃状态时&#xff0c;就会根据崩溃的程度执行不同的救援行动&#xff0c;以期望让设备恢复到正常使用的状态。 开机后会自动重启&#xff0c;进入Recovery界面。经查找&#xff0c;是…...

详细介绍iutils.dll丢失的多个解决方法,一键快速修复丢失的iutils.dll文件

当用户遭遇“iutils.dll缺失”的提示时&#xff0c;这通常预示着依赖该库文件的程序将面临启动失败或功能受限的风险。DLL&#xff08;Dynamic Link Library&#xff0c;动态链接库&#xff09;文件无疑占据了核心地位。这些文件就如同建筑师手中的蓝图&#xff0c;为软件的构建…...

基于SpringBoot+Vue的美容美发在线预约系统的设计与实现【附源码】

毕业设计(论文) 题目&#xff1a;基于SpringBootVue的美容美发在线预约系统的设计与实现 二级学院&#xff1a; 专业(方向)&#xff1a; 班 级&#xff1a; 学 生&#xff1a; 指导教师&#xff…...

语言的数据结构:树与二叉树(二叉树篇)

语言的数据结构&#xff1a;树与二叉树&#xff08;二叉树篇&#xff09; 前言概念特别的二叉树满二叉树完全二叉树 存储结构顺序存储链式存储 查找方式 前言 上文说到了树&#xff0c;有人认为二叉树是树的每一个分支都有两个子节点。其实这也对。但二叉树在此基础上还做了限…...

若以框架学习(3),echarts结合后端数据展示,暂时完结。

前三天&#xff0c;参加毕业典礼&#xff0c;领毕业证&#xff0c;顿时感到空落落的失去感&#xff0c;没有工作&#xff0c;啥也没有&#xff0c;总感觉一辈子白活了。晚上ktv了一晚上&#xff0c;由于我不咋个唱歌&#xff0c;没心情&#xff0c;听哥几个唱了一晚上周杰伦&am…...

Spring Boot循环依赖(解决)

类与类之间的依赖关系形成了闭环&#xff0c;就会导致循环依赖问题的产生。举例来说&#xff0c;假设存在两个服务类A和服务类B&#xff0c;如果A通过依赖注入的方式引用了B&#xff0c;且B通过依赖注入的方式引用了A&#xff0c;那么A和B之间就存在循环依赖。 换成如下方法获…...

emqx4.4.3关于如何取消匿名登录,添加认证用户这件事

emqx4.4.3如何取消匿名登录&#xff0c;添加认证用户 emqx版本&#xff1a;4.4.3 背景&#xff1a;使用docker搭建完emqx后&#xff0c;使用 MQTTX 连接总是超时&#xff1a; 检查Java项目 是否有接口&#xff1a;https://XXXX:80/mqtt/auth? 若有&#xff0c;则具体逻辑查询…...

七天速通javaSE:第三天 程序控制结构:练习题

文章目录 前言一、基础1.计算从0~100之间奇数之和和偶数之和2. 用for循环输出0~1000之间能被5整除的数&#xff0c;每行输出三个 二、进阶1. 九九乘法表2.等边三角形 前言 本文主要讲解三种基本程序控制结构的练习题&#xff0c;以期熟练掌握顺序、选择、循环三种基本结构 一、…...

新增题目接口开发

文章目录 1.基本设计2.生成CRUD代码1.生成五张表的代码1.subject_info2.subject_brief3.subject_judge4.subject_multiple5.subject_radio 2.将所有的dao放到mapper文件夹3.将所有实体类使用lombok简化4.删除所有mapper的Param("pageable") Pageable pageable5.删除所…...

国内怎样使用GPT4 turbo

GPT是当前最为熟知的大模型&#xff0c;它优越的性能一直遥遥领先于其它一众厂商&#xff0c;然而如此优秀的AI在中国境内却是无法正常使用的。本文将告诉你4种使用gpt4的方法&#xff0c;让你突破限制顺利使用。 官方售价是20美元/月&#xff0c;40次提问/3小时&#xff0c;需…...

【语义分割】1-标注数据集-【单张图片】labelme标注json文件转mask

声明&#xff1a;我学习了b站&#xff1a;标注自己的语义分割数据集_哔哩哔哩_bilibili 并且复现了&#xff0c;记录了所思所得。 主要是说了&#xff1a; 做语义分割&#xff0c;数据集怎么用labelme标注成json文件&#xff0c;以及&#xff0c;json文件怎么转成mask 流程…...