做网站做app区别,湛江快速网站建设在哪里做,兰州市建设工程质量监督站网站,做网站视频背景前言 本文小编将详细解析Spring Boot框架#xff0c;并通过代码举例说明每个层的作用。我们将深入探讨Spring Boot的整体架构#xff0c;包括展示层、业务逻辑层和数据访问层。通过这些例子#xff0c;读者将更加清晰地了解每个层在应用程序中的具体作用。通过代码实例…前言 本文小编将详细解析Spring Boot框架并通过代码举例说明每个层的作用。我们将深入探讨Spring Boot的整体架构包括展示层、业务逻辑层和数据访问层。通过这些例子读者将更加清晰地了解每个层在应用程序中的具体作用。通过代码实例我们将帮助读者更好地理解和应用Spring Boot框架从而提高应用程序的可维护性和可扩展性。 什么是Spring Boot 在介绍Spring Boot框架的分层之前小编先为大家介绍一下什么是Spring Boot Spring Boot是一个基于Spring框架的开发框架旨在简化Spring应用程序的搭建和开发。Spring Boot提供了很多自动化配置的功能可以快速地搭建一个基于Spring的Web应用程序而不需要手动进行繁琐的配置。 Spring Boot可以帮助开发人员快速构建各种类型的应用程序包括Web应用程序、RESTful服务、批处理应用程序和基于消息的应用程序等。它采用Java编程语言并且可以与各种其他技术集成例如Thymeleaf、MongoDB、Redis等。 Spring Boot还提供了很多有用的工具和插件例如Spring Boot CLI命令行界面可以帮助开发人员更加便捷地创建、运行和测试Spring Boot应用程序。此外Spring Boot还支持各种构建工具例如Maven和Gradle以及各种开发环境例如Eclipse和IntelliJ IDEA。 Spring Boot分层 Spring Boot主要分为4层Controller层、Service层、Repository/DAO层和Model层。 1. Controller层 在SpringBoot中Controller层是MVCModel-View-Controller模式中的控制器部分负责处理来自用户发起的HTTP请求并返回相应的响应结果。Controller层接收到请求后通常会调用Service层进行业务逻辑处理最后再将处理结果封装成响应对象并返回给前端。 一个Controller类通常包含多个方法每个方法对应一个不同的HTTP请求路径并使用特定的注解来标识。例如使用GetMapping注解表示该方法处理GET请求PostMapping表示该方法处理POST请求。同时通过RequestParam注解可以获取请求参数PathVariable注解可以获取URL路径参数RequestBody注解可以获取请求体中的数据。 2. Service层 在Spring Boot中Service层是应用程序的一部分负责处理业务逻辑和协调不同的组件。它是控制器Controller和数据访问层Repository之间的中间层用于将业务逻辑与数据操作解耦。 Service层的主要职责可以总结如下 执行业务逻辑Service层负责实现应用程序的业务逻辑。它包含了具体的业务规则和操作流程以满足需求和业务规定。例如对于电子商务应用程序Service层可能会包含创建订单、处理支付、验证库存等业务逻辑的实现。 协调数据访问Service层充当控制器和数据访问层之间的桥梁。它通过调用相应的Repository接口来执行数据操作如查询数据库、保存数据、更新数据等。Service层可以组织和协调多个Repository操作以完成复杂的业务需求。 提供业务接口Service层可以定义一些公共接口或方法供其他组件如控制器、其他Service等使用。这样可以封装底层的业务逻辑实现使其对外提供统一的接口。这种封装有助于提高代码的可维护性和重用性。 处理事务管理Service层通常涉及到数据库的读写操作需要保证数据的一致性和完整性。通过使用Spring框架提供的事务管理机制Service层可以确保多个数据库操作在一个事务中执行。它可以定义事务的边界、隔离级别、回滚策略等以确保数据操作的正确性和可靠性。 实现业务规则和验证Service层可以包含对传入数据的验证和处理逻辑。例如对于用户注册操作Service层可能会对输入的用户名进行唯一性检查对密码进行加密等。这样可以保证应用程序的安全性和数据的有效性。 3. Repository/DAO层 DAO全称是Data Access Object其主要目标是从数据库高效获取查询数据并为service层提供服务。 Repository/DAO层的主要职责可以总结如下 定义数据访问接口Repository或DAO层定义了访问数据库的接口它们通常包括各种读、写、更新、删除等操作。这些操作通过方法调用来实现使得业务逻辑可以轻松地使用这些操作。 提供数据映射Repository或DAO层负责将数据库中的数据映射到Java类或对象中。这种映射可以是简单的一对一关系也可以是复杂的关联关系。通常情况下开发人员会使用ORM框架如Hibernate来自动完成数据映射。 处理数据访问异常Repository或DAO层负责处理与数据访问相关的异常情况例如数据库连接失败、SQL语句执行错误等。它们可以捕获这些异常并进行相应的处理以保证应用程序的稳定性和可靠性。 支持数据源配置Repository或DAO层支持不同类型的数据源配置例如关系型数据库、NoSQL数据库、文件系统等。它们可以根据不同的数据源类型提供相应的数据访问接口和数据映射策略。 提供数据缓存Repository或DAO层可以缓存已经读取的数据以提高应用程序的性能。它们可以使用内存缓存、分布式缓存等不同类型的缓存机制根据业务需求进行选择。 4. Model层 在Spring Boot中Model层对象是用于封装和传递数据的Java对象。它表示应用程序中的业务数据并负责处理数据的获取、保存和修改等操作。Model层对象通常具有以下特点 实体类Entity ClassModel层对象通常是实体类或POJOPlain Old Java Object用于表示业务数据的结构。实体类的属性对应数据库表的字段通过ORMObject-Relational Mapping框架可以将实体类与数据库进行映射。 数据传输对象Data Transfer ObjectDTO在一些场景下为了满足特定的需求可能需要使用DTO来封装数据。DTO是一个简单的Java对象用于在不同的层之间传输数据。DTO通常只包含必要的属性以减少数据传输的大小和复杂性。 数据校验Data ValidationModel层对象可以用于数据校验确保传入的数据符合特定的规则和要求。可以使用注解如javax.validation.constraints或其他验证框架如Hibernate Validator对属性进行校验。 业务逻辑Business LogicModel层对象可以包含一些业务逻辑的方法用于处理数据的计算、转换和操作等。这些方法可以在Model层对象中定义或者在服务层Service Layer中进行实现。 代码示例 1.Controller层 ProjectController.java package com.example.Controller;
//import statements goes here
RestController
public class UserController {//List all the available projectsGetMapping(path /projects, produces MediaType.APPLICATION_JSON_VALUE)public ResponseEntityListProject getProjects() {// perform validation checks// return the services provided by service layer}//Apply for the projectPostMapping(path /apply-project, consumes MediaType.APPLICATION_JSON_VALUE)public ResponseEntityHttpStatus applyProject(RequestBody MapString,String json) {// perform validation checks// return the services provided by service layer}//Upload resumePostMapping(path /upload-resume/{usn})public ResponseEntityListObject uploadToDB(RequestParam(file) MultipartFile[] file,PathVariable String usn) {// perform validation checks// return the services provided by service layer}//Download resumeGetMapping(/files/download/{fileName:.})public ResponseEntity downloadFromDB(PathVariable String fileName) {// perform validation checks// return the services provided by service layer}
} 上面例子使用了GetMapping和PostMapping GetMapping注解用于将一个方法映射到指定的HTTP GET请求。它可以用于处理浏览器直接访问某个URL或者其他应用程序发起GET请求的情况。通过在方法上添加GetMapping我们可以定义一个处理该请求的方法并在方法中编写相应的业务逻辑。 PostMapping注解用于将一个方法映射到指定的HTTP POST请求。它可以用于处理表单提交、客户端数据上传等操作。通过在方法上添加PostMapping我们可以定义一个处理该请求的方法并在方法中编写相应的业务逻辑。 2.Service层 下面这段定义了项目相关的服务方法并规定这些方法的输入参数和返回值。 在代码示例中ProjectService 接口声明了三个方法 getProjects() 方法返回一个 ListProject 对象作为响应体ResponseEntity用于获取所有项目信息。 applyProject(String USN,int project_id) 方法返回 HttpStatus 枚举值表示申请参与某个项目的状态。 uploadProjectDocument(MultipartFile[] files,int project_id) 方法返回 ListObject 对象作为响应体用于上传项目文档。 ProjectService.java package com.example.Service;// import statementspublic interface ProjectService {ResponseEntityListProject getProjects();HttpStatus applyProject(String USN,int project_id);ResponseEntityListObject uploadProjectDocument(MultipartFile[] files,int project_id);} ProjectServiceImpl.java package com.example.Service;//import statements
Service
public class ProjectServiceImpl implements ProjectService {
//dependency injection of DAO to be gone here (Autowire)Overridepublic ResponseEntityListProject getProjects() {try {//Business logic implementation using DAO services} catch (Exception e) {return new ResponseEntity(null,HttpStatus.INTERNAL_SERVER_ERROR) ;}}Overridepublic HttpStatus applyProject(String USN, int project_id) {//Business logic implementation using DAO services}//helper functionspublic ResponseEntity uploadToLocalFileSystem(MultipartFile file,int project_id) {}Overridepublic ResponseEntityListObject uploadProjectDocument(MultipartFile[] files,int project_id) {//Business logic implementation using DAO services}} 3.Repository/DAO层 下面的这段代码是一个接口类属于包名为com.example.Dao的项目数据访问对象DAO。它扩展了 JpaRepositoryProject, Integer 接口该接口提供了基本的CRUD创建、读取、更新、删除操作方法用于对数据库中的 Project 实体进行操作。 ProjectDAO.java package com.example.Dao;//import statementspublic interface ProjectDao extends JpaRepositoryProject,Integer {//You can also include native queries on top of CRUD operations provided by JPA
// Add queries here using Query annotations and corresponding functionsQuery(value Your SQL query ,nativeQuery true)public ListProject getProjects();}} 4.Model层 下面这段代码定义了一个名为 Project 的实体类表示一个项目。它包含了项目的各个属性如项目ID、公司名称、描述、要求等并与其他实体类如员工、学生、文档、资金等之间建立了关联关系。通过使用 JPA 注解该类可以方便地进行数据库操作和查询。 代码中的各个部分的含义如下 Entity 注解表示该类是一个实体类与数据库中的表进行映射。 Table(name project) 注解指定了对应的数据库表名为 project。 Id 注解表示该字段是主键。 GeneratedValue(strategy GenerationType.IDENTITY) 注解指定了主键的生成策略为自增长。 Column 注解用于指定该属性与数据库表中的列的映射关系其中 nullable 属性表示该列是否允许为空name 属性指定了对应的数据库列名。 JsonIgnore 注解用于忽略该属性在序列化和反序列化过程中的处理。 ManyToMany(mappedByfunded_projects) 注解表示当前实体与另一个实体 Fund 之间存在多对多的关联关系通过 mappedBy 属性指定了在 Fund 实体中维护关联关系的属性名为 funded_projects。 SetStaff, SetStudent, SetDocument, SetFund 表示与其他实体之间的关联关系通过集合类型的属性来表示多对多关系或一对多关系。 Project.java package com.example.Entity;//import statementsEntity
Table(name project)
public class Project {IdGeneratedValue(strategy GenerationType.IDENTITY)private int project_id;Column(nullable false, name company_name)private String company_name;Column(nullable false, name description)private String description;Column(nullable false, name requirements)private String requirements;Column(nullable false, name manager)private String manager;Column(nullable false, name start_date)private Date start_date new Date();Column( name end_date)private Date end_date new Date();Column(nullable false,name opening)private int opening;Column(name resources)private String resources;public SetStaff getStaff_incharge() {return staff_incharge;}public void setStaff_incharge(SetStaff staff_incharge) {this.staff_incharge staff_incharge;}public SetStudent getApplied_students() {return applied_students;}public SetDocument getDocuments() {return documents;}public void setDocuments(SetDocument documents) {this.documents documents;}JsonIgnoreManyToMany(mappedByfunded_projects)private SetFund funds;public SetFund getFunds() {return funds;}public void setFunds(SetFund funds) {this.funds funds;}public void setApplied_students(SetStudent applied_students) {this.applied_students applied_students;}public SetStudent getWorking_students() {return working_students;}public void setWorking_students(SetStudent working_students) {this.working_students working_students;}
//constructorspublic Project() {super();}public Project(int project_id, String company_name, String description, String requirements, String manager, Date start_date, Date end_date, int opening, String resources) {super();this.project_id project_id;this.company_name company_name;this.description description;this.requirements requirements;this.manager manager;this.start_date start_date;this.end_date end_date;this.opening opening;this.resources resources;}public int getProject_id() {return project_id;}public void setProject_id(int project_id) {this.project_id project_id;}public String getCompany_name() {return company_name;}public void setCompany_name(String company_name) {this.company_name company_name;}public String getDescription() {return description;}public void setDescription(String description) {this.description description;}public String getRequirements() {return requirements;}public void setRequirements(String requirements) {this.requirements requirements;}public String getManager() {return manager;}public void setManager(String manager) {this.manager manager;}public Date getStart_date() {return start_date;}public void setStart_date(Date start_date) {this.start_date start_date;}public Date getEnd_date() {return end_date;}public void setEnd_date(Date end_date) {this.end_date end_date;}public int getOpening() {return opening;}public void setOpening(int opening) {this.opening opening;}public String getResources() {return resources;}public void setResources(String resources) {this.resources resources;}Overridepublic String toString() {return Project{ project_id project_id , company_name company_name \ , description description \ , requirements requirements \ , manager manager \ , start_date start_date , end_date end_date , opening opening , resources resources \ };}
} 总结
本文为读者详细介绍了Spring Boot框架的四层构架以及如何使用各种技术和工具来进行开发。通过阅读本文希望可以帮助读者可以更好地理解Spring Boot框架的工作原理和应用场景并能够利用所学知识来实现自己的项目。 参考资料《Understanding Spring Boot Architecture》 扩展链接 Redis从入门到实践 一节课带你搞懂数据库事务 Chrome开发者工具使用教程 从表单驱动到模型驱动解读低代码开发平台的发展趋势 低代码开发平台是什么 基于分支的版本管理帮助低代码从项目交付走向定制化产品开发 文章转载自葡萄城技术团队
原文链接https://www.cnblogs.com/powertoolsteam/p/17816504.html