Web后端开发(三层架构)

三层架构

controller :控制层,接收前端发送的请求,对请求进行处理,并响应数据。
service :业务逻辑层,处理具体的业务逻辑。
dao :数据访问层 (Data Access Object) (持久层),负责数据访问操作,包括数据的增、删、改、查。

拆分前

@RestController
public class EmpController{@RequestMapping("/listEmp")public Result list(){//1. 加载 emp.xml, 并解析 emp.xml 中的数据String file = this.getClass().getClassLoader().getResourse("emp.xml").getFile();List<Emp> empList = XmlParserUtils.parse(file, Emp.class);//2.对员工信息中的gender , job字段进行处理empList.stream().forEach(emp -> {String gender = emp.getGender();if("1".equals(gender)){emp.setGender("男");}else if("2".equals(gender)){emp.setGender("女");}String job = emp.getJob();if("1".equals(job)){emp.setGender("讲师");}else if("2".equals(job)){emp.setGender("班主任");}else if("2".equals(job)){emp.setGender("就业指导");}});//3.组装数据并返回return Result.success(empList);}
}

劣势:复用性差;难以维护。

拆分后

数据访问操作

public interface EmpDao{//获取员工列表数据public List<Emp> listEmp();
}
public class EmpDaoA implements EmpDao{@Overridepublic List<Emp> listEmp(){//1. 加载 emp.xml, 并解析 emp.xml 中的数据String file = this.getClass().getClassLoader().getResourse("emp.xml").getFile();List<Emp> empList = XmlParserUtils.parse(file, Emp.class);return empList;}
}

业务逻辑处理

public interface EmpService{//获取员工列表public List<Emp> listEmp();
}
public class EmpServiceA implements EmpService{private EmpDao empDao = new EmpDaoA();@Overridepublic List<Emp> listEmp(){List<Emp> empList = empDao.empList();//2.对员工信息中的gender , job字段进行处理empList.stream().forEach(emp -> {String gender = emp.getGender();if("1".equals(gender)){emp.setGender("男");}else if("2".equals(gender)){emp.setGender("女");}String job = emp.getJob();if("1".equals(job)){emp.setGender("讲师");}else if("2".equals(job)){emp.setGender("班主任");}else if("2".equals(job)){emp.setGender("就业指导");}});return empList;}
}

接收请求,响应数据

@RestController
public class EmpController{private EmpService empService = new EmpServiceA();@RequestMapping("/listEmp")public Result list(){List<Emp> empList = empService.listEmp();    //3.组装数据并返回return Result.success(empList);}
}

优势:复用性强;便于维护;利于拓展。

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

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

相关文章

AGP4+ 打包运行闪退,AGP7+ 正常(has code but is marked native or abstract)

问题 安装应用&#xff0c;点击图标启动立马闪退&#xff01; 诡异的闪退&#xff1a;AGP4 打包运行闪退&#xff0c;AGP7 正常 unity 导出的 Android 日志两个主要点&#xff1a; com.android.boot.App 是 Android 的 application 子类&#xff0c;程序入口 java.lang.Class…

字符串的复杂操作(字符串的下标和切片、以及字符串的相关操作函数方法)

如果使用不符合标准的标识符,将会报错 SyntaxError: incalid syntax(无效语法) 文章目录 一、字符串的复杂操作1.1 下标&#xff08;也叫索引&#xff09;1.2 切片 一、字符串的复杂操作 1.1 下标&#xff08;也叫索引&#xff09; 下标代表着第几个数据&#xff0c;从0开始计…

IDEA 高效插件工具

文章目录 LombokMaven Helper 依赖冲突any-rule(正则表达式插件)快速生成javadocGsonFormat (Aits) 将json解析成类Diagrams使用 类图SequenceDiagram时序图GenerateAllSetter&#xff08;AltEnter&#xff09;大小写转写String ManipulationGitToolBox 代码提交人activate-pow…

Spring Boot集成tablesaw插件快速入门Demo

1 什么是tablesaw&#xff1f; Tablesaw是一款Java的数据可视化库&#xff0c;主要包括两部分&#xff1a; 数据解析库&#xff0c;主要用于加载数据&#xff0c;对数据进行操作(转化&#xff0c;过滤&#xff0c;汇总等)&#xff0c;类比Python中的Pandas库&#xff1b; 数据…

Objective-C的初始化方法中,应该如何读写属性

除非有明确的原因需要使用setter, getter, 否则总是应该直接访问, 也就是直接使用实例变量&#xff08;也称为 iVar&#xff09;来读写数据 理由&#xff1a; 避免子类覆盖setter方法的影响&#xff1a;若在初始化方法中使用setter方法, 使用此方法实例化子类, 可能会调用子类…

即插即用!CVD:第一个生成具有相机控制的多视图一致视频方案!(斯坦福港中文)

论文链接&#xff1a;https://arxiv.org/abs/2405.17414 项目链接&#xff1a;https://collaborativevideodiffusion.github.io/ 最近对视频生成的研究取得了巨大进展&#xff0c;使得可以从文本提示或图像生成高质量的视频。在视频生成过程中添加控制是未来的重要目标&#x…

ARM32开发--IIC软实现

知不足而奋进 望远山而前行 目录 文章目录 前言 开发流程 GD32F4软件I2C初始化 GD32F4软件I2C引脚功能 写操作 读操作 总结 前言 在嵌入式系统开发中&#xff0c;软件实现的I2C通信协议扮演着至关重要的角色。本文将深入探讨如何在GD32F4系列微控制器上实现软件I2C功能…

.NET MAUI Sqlite程序应用-数据库配置(一)

项目名称:Ownership&#xff08;权籍信息采集&#xff09; 一、安装 NuGet 包 安装 sqlite-net-pcl 安装 SQLitePCLRawEx.bundle_green 二、创建多个表及相关字段 Models\OwnershipItem.cs using SQLite;namespace Ownership.Models {public class fa_rural_base//基础数据…

湖仓一体全面开启实时化时代

摘要&#xff1a;本文整理自阿里云开源大数据平台负责人王峰&#xff08;莫问&#xff09;老师在5月16日 Streaming Lakehouse Meetup Online 上的分享&#xff0c;主要介绍在新一代湖仓架构上如何进行实时化大数据分析。内容主要分为以下五个部分&#xff1a; Data Lake Dat…

java线程池讲解!核心参数

创建方式 | 构造方法 Executor构造方法 存放线程的容器&#xff1a; private final HashSet<Worker> workers new HashSet<Worker>(); 构造方法&#xff1a; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit uni…

vue页面和 iframe多页面无刷新方案和并行存在解决方案

面临问题 : back的后台以jsp嵌套iframe为主, 所以在前端框架要把iframe无刷新嵌套和vue页面进行并行使用,vue的keep-alive只能对虚拟dom树 vtree 进行缓存无法缓存iframe,所以要对iframe进行处理 tab标签的切换效果具体参考若依框架的tab切换,可以去若依看源码,若依源码没有实…

NodeClub:NodeJS构造开源交流社区

NodeClub&#xff1a; 连接每一个想法&#xff0c;NodeClub让社区更生动- 精选真开源&#xff0c;释放新价值。 概览 NodeClub是一个基于Node.js和MongoDB构建的社区系统&#xff0c;专为开发者和社区爱好者设计。它提供了一套完整的社区功能&#xff0c;包括用户管理、内容发…

进击算法工程师深度学习课程

"进击算法工程师深度学习课程"旨在培养学员在深度学习领域的专业技能和实战经验。课程涵盖深度学习基础理论、神经网络架构、模型优化方法等内容&#xff0c;通过项目实践和算法实现&#xff0c;帮助学员掌握深度学习算法原理和应用&#xff0c;提升在算法工程师领域…

在k8s中部署Elasticsearch高可用集群详细教程

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

Unity EasyRoads3D插件使用

一、插件介绍 描述 Unity 中的道路基础设施和参数化建模 在 Unity 中使用内置的可自定义动态交叉预制件和基于您自己导入的模型的自定义交叉预制件&#xff0c;直接创建独特的道路网络。 添加额外辅助对象&#xff0c;让你的场景栩栩如生&#xff1a;桥梁、安全护栏、栅栏、墙壁…

03 SpringBoot 的工作原理

1.Spring Boot 的执行流程 Spring Boot 的执行流程主要分为两步&#xff1a; 初始化Spring Application实例 查看classpath类路径webApplicationType下是否存在某个特征类获取所有可用的应用初始化器类ApplicationContextInitializer获取所有可用的监听器类ApplicationListene…

【并集查找】839. 相似字符串组

本文涉及知识点 并集查找&#xff08;并差集) 图论知识汇总 LeetCode839. 相似字符串组 如果交换字符串 X 中的两个不同位置的字母&#xff0c;使得它和字符串 Y 相等&#xff0c;那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的&#xff0c;那它们也是相似的。…

HarmonyOS(36) DevEco Studio 配置debug和release

在android开发中可以在build.gradle来配置realease和debug,在HarmonyOS中可以通过build-profile.json5文件中通过buildModeSet配置&#xff1a; 在DevEco Studio 中可以通过下面来选择运行debug还是release&#xff1a; 我们可以通过BuildProfile.ets里面的静态变量获取当前…

全球经典智能仓储物流系统--大集锦

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 一、引言 在全球物流行业高速发展的今天&#xff0c;智能仓储物流系统已成为提升物流效率、降低成本的关键。 以下将详细介绍几种全球经…

在AI云原生时代应该如何应对复杂的算力环境

引言 随着在2019年ChatGPT4的爆火,AI这个之前常常被人觉得非常高深的技术渐渐的被越来越多的人们所了解,越来越多的公司、组织和开发者开始投入AI的使用和开发中来.随着AI和LLM的火热,算力资源也变的越来越紧缺,所以如何高效的管理和使用算力资源也变成了必须要面对的问题。 …