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

北京商城网站建设报价seo网页推广

北京商城网站建设报价,seo网页推广,网站制作公司官网首页,怎么自己做论坛网站前言 本文小编将详细解析Spring Boot框架,并通过代码举例说明每个层的作用。我们将深入探讨Spring Boot的整体架构,包括展示层、业务逻辑层和数据访问层。通过这些例子,读者将更加清晰地了解每个层在应用程序中的具体作用。通过代码实例&…

前言

本文小编将详细解析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层是MVC(Model-View-Controller)模式中的控制器部分,负责处理来自用户发起的HTTP请求,并返回相应的响应结果。Controller层接收到请求后,通常会调用Service层进行业务逻辑处理,最后再将处理结果封装成响应对象并返回给前端。

一个Controller类通常包含多个方法,每个方法对应一个不同的HTTP请求路径,并使用特定的注解来标识。例如,使用@GetMapping注解表示该方法处理GET请求,@PostMapping表示该方法处理POST请求。同时,通过@RequestParam注解可以获取请求参数,@PathVariable注解可以获取URL路径参数,@RequestBody注解可以获取请求体中的数据。

2. Service层

在Spring Boot中,Service层是应用程序的一部分,负责处理业务逻辑和协调不同的组件。它是控制器(Controller)和数据访问层(Repository)之间的中间层,用于将业务逻辑与数据操作解耦。

Service层的主要职责可以总结如下:

  1. 执行业务逻辑:Service层负责实现应用程序的业务逻辑。它包含了具体的业务规则和操作流程,以满足需求和业务规定。例如,对于电子商务应用程序,Service层可能会包含创建订单、处理支付、验证库存等业务逻辑的实现。

  1. 协调数据访问:Service层充当控制器和数据访问层之间的桥梁。它通过调用相应的Repository接口来执行数据操作,如查询数据库、保存数据、更新数据等。Service层可以组织和协调多个Repository操作,以完成复杂的业务需求。

  1. 提供业务接口:Service层可以定义一些公共接口或方法,供其他组件(如控制器、其他Service等)使用。这样可以封装底层的业务逻辑实现,使其对外提供统一的接口。这种封装有助于提高代码的可维护性和重用性。

  1. 处理事务管理:Service层通常涉及到数据库的读写操作,需要保证数据的一致性和完整性。通过使用Spring框架提供的事务管理机制,Service层可以确保多个数据库操作在一个事务中执行。它可以定义事务的边界、隔离级别、回滚策略等,以确保数据操作的正确性和可靠性。

  1. 实现业务规则和验证:Service层可以包含对传入数据的验证和处理逻辑。例如,对于用户注册操作,Service层可能会对输入的用户名进行唯一性检查,对密码进行加密等。这样可以保证应用程序的安全性和数据的有效性。

3. Repository/DAO层

DAO全称是Data Access Object,其主要目标是从数据库高效获取(查询)数据,并为service层提供服务。

Repository/DAO层的主要职责可以总结如下:

  1. 定义数据访问接口:Repository或DAO层定义了访问数据库的接口,它们通常包括各种读、写、更新、删除等操作。这些操作通过方法调用来实现,使得业务逻辑可以轻松地使用这些操作。

  1. 提供数据映射:Repository或DAO层负责将数据库中的数据映射到Java类或对象中。这种映射可以是简单的一对一关系,也可以是复杂的关联关系。通常情况下,开发人员会使用ORM框架(如Hibernate)来自动完成数据映射。

  1. 处理数据访问异常:Repository或DAO层负责处理与数据访问相关的异常情况,例如数据库连接失败、SQL语句执行错误等。它们可以捕获这些异常并进行相应的处理,以保证应用程序的稳定性和可靠性。

  1. 支持数据源配置:Repository或DAO层支持不同类型的数据源配置,例如关系型数据库、NoSQL数据库、文件系统等。它们可以根据不同的数据源类型,提供相应的数据访问接口和数据映射策略。

  1. 提供数据缓存:Repository或DAO层可以缓存已经读取的数据,以提高应用程序的性能。它们可以使用内存缓存、分布式缓存等不同类型的缓存机制,根据业务需求进行选择。

4. Model层

在Spring Boot中,Model层对象是用于封装和传递数据的Java对象。它表示应用程序中的业务数据,并负责处理数据的获取、保存和修改等操作。Model层对象通常具有以下特点:

  1. 实体类(Entity Class):Model层对象通常是实体类或POJO(Plain Old Java Object),用于表示业务数据的结构。实体类的属性对应数据库表的字段,通过ORM(Object-Relational Mapping)框架可以将实体类与数据库进行映射。

  1. 数据传输对象(Data Transfer Object,DTO):在一些场景下,为了满足特定的需求,可能需要使用DTO来封装数据。DTO是一个简单的Java对象,用于在不同的层之间传输数据。DTO通常只包含必要的属性,以减少数据传输的大小和复杂性。

  1. 数据校验(Data Validation):Model层对象可以用于数据校验,确保传入的数据符合特定的规则和要求。可以使用注解(如javax.validation.constraints)或其他验证框架(如Hibernate Validator)对属性进行校验。

  1. 业务逻辑(Business Logic):Model层对象可以包含一些业务逻辑的方法,用于处理数据的计算、转换和操作等。这些方法可以在Model层对象中定义,或者在服务层(Service Layer)中进行实现。

代码示例:

1.Controller层:

ProjectController.java

package com.example.Controller;
//import statements goes here
@RestController
public class UserController {//List all the available projects@GetMapping(path = "/projects", produces = MediaType.APPLICATION_JSON_VALUE)public ResponseEntity<List<Project>> getProjects() {// perform validation checks// return the services provided by service layer}//Apply for the project@PostMapping(path = "/apply-project", consumes = MediaType.APPLICATION_JSON_VALUE)public ResponseEntity<HttpStatus> applyProject(@RequestBody Map<String,String> json) {// perform validation checks// return the services provided by service layer}//Upload resume@PostMapping(path = "/upload-resume/{usn}")public ResponseEntity<List<Object>> uploadToDB(@RequestParam("file") MultipartFile[] file,@PathVariable String usn) {// perform validation checks// return the services provided by service layer}//Download resume@GetMapping("/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 接口声明了三个方法:

  1. getProjects() 方法返回一个 List<Project> 对象作为响应体(ResponseEntity),用于获取所有项目信息。

  1. applyProject(String USN,int project_id) 方法返回 HttpStatus 枚举值,表示申请参与某个项目的状态。

  1. uploadProjectDocument(MultipartFile[] files,int project_id) 方法返回 List<Object> 对象作为响应体,用于上传项目文档。

ProjectService.java

package com.example.Service;// import statementspublic interface ProjectService {ResponseEntity<List<Project>> getProjects();HttpStatus applyProject(String USN,int project_id);ResponseEntity<List<Object>> 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 ResponseEntity<List<Project>> 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 ResponseEntity<List<Object>> uploadProjectDocument(MultipartFile[] files,int project_id) {//Business logic implementation using DAO services}}

3.Repository/DAO层:

下面的这段代码是一个接口类,属于包名为"com.example.Dao"的项目数据访问对象(DAO)。它扩展了 JpaRepository<Project, Integer> 接口,该接口提供了基本的CRUD(创建、读取、更新、删除)操作方法,用于对数据库中的 "Project" 实体进行操作。

ProjectDAO.java

package com.example.Dao;//import statementspublic interface ProjectDao extends JpaRepository<Project,Integer> {//You can also include native queries on top of CRUD operations provided by JPA
// Add queries here using @Query annotations and corresponding functions@Query(value = "Your SQL query ",nativeQuery = true)public List<Project> getProjects();}}

4.Model层:

下面这段代码定义了一个名为 "Project" 的实体类,表示一个项目。它包含了项目的各个属性(如项目ID、公司名称、描述、要求等),并与其他实体类(如员工、学生、文档、资金等)之间建立了关联关系。通过使用 JPA 注解,该类可以方便地进行数据库操作和查询。

代码中的各个部分的含义如下:

  1. @Entity 注解表示该类是一个实体类,与数据库中的表进行映射。

  1. @Table(name = "project") 注解指定了对应的数据库表名为 "project"。

  1. @Id 注解表示该字段是主键。

  1. @GeneratedValue(strategy = GenerationType.IDENTITY) 注解指定了主键的生成策略为自增长。

  1. @Column 注解用于指定该属性与数据库表中的列的映射关系,其中 nullable 属性表示该列是否允许为空,name 属性指定了对应的数据库列名。

  1. @JsonIgnore 注解用于忽略该属性在序列化和反序列化过程中的处理。

  1. @ManyToMany(mappedBy="funded_projects") 注解表示当前实体与另一个实体 Fund 之间存在多对多的关联关系,通过 mappedBy 属性指定了在 Fund 实体中维护关联关系的属性名为

  1. "funded_projects"。

  1. Set<Staff>, Set<Student>, Set<Document>, Set<Fund> 表示与其他实体之间的关联关系,通过集合类型的属性来表示多对多关系或一对多关系。

Project.java

package com.example.Entity;//import statements@Entity
@Table(name = "project")
public class Project {@Id@GeneratedValue(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 Set<Staff> getStaff_incharge() {return staff_incharge;}public void setStaff_incharge(Set<Staff> staff_incharge) {this.staff_incharge = staff_incharge;}public Set<Student> getApplied_students() {return applied_students;}public Set<Document> getDocuments() {return documents;}public void setDocuments(Set<Document> documents) {this.documents = documents;}@JsonIgnore@ManyToMany(mappedBy="funded_projects")private Set<Fund> funds;public Set<Fund> getFunds() {return funds;}public void setFunds(Set<Fund> funds) {this.funds = funds;}public void setApplied_students(Set<Student> applied_students) {this.applied_students = applied_students;}public Set<Student> getWorking_students() {return working_students;}public void setWorking_students(Set<Student> 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


文章转载自:
http://engrossing.zfqr.cn
http://micromation.zfqr.cn
http://suakin.zfqr.cn
http://empale.zfqr.cn
http://reinvest.zfqr.cn
http://shortcoming.zfqr.cn
http://automaticity.zfqr.cn
http://globulous.zfqr.cn
http://babyism.zfqr.cn
http://woodsia.zfqr.cn
http://afghanistan.zfqr.cn
http://antiwar.zfqr.cn
http://attenuant.zfqr.cn
http://lymphoma.zfqr.cn
http://entomotomist.zfqr.cn
http://genette.zfqr.cn
http://pemphigus.zfqr.cn
http://recolor.zfqr.cn
http://unaccepted.zfqr.cn
http://colubrine.zfqr.cn
http://reservist.zfqr.cn
http://kudu.zfqr.cn
http://assentation.zfqr.cn
http://joneses.zfqr.cn
http://linebred.zfqr.cn
http://monolith.zfqr.cn
http://subterrestrial.zfqr.cn
http://shyster.zfqr.cn
http://imprese.zfqr.cn
http://disquiet.zfqr.cn
http://sympathomimetic.zfqr.cn
http://masterful.zfqr.cn
http://advect.zfqr.cn
http://bombload.zfqr.cn
http://concinnity.zfqr.cn
http://protium.zfqr.cn
http://graveclothes.zfqr.cn
http://normality.zfqr.cn
http://reencounter.zfqr.cn
http://anabatic.zfqr.cn
http://metagon.zfqr.cn
http://nurturance.zfqr.cn
http://duchy.zfqr.cn
http://barhop.zfqr.cn
http://branchiae.zfqr.cn
http://naggish.zfqr.cn
http://gauchist.zfqr.cn
http://hemelytrum.zfqr.cn
http://trebuchet.zfqr.cn
http://cytoplast.zfqr.cn
http://existential.zfqr.cn
http://nodose.zfqr.cn
http://unengaging.zfqr.cn
http://innocence.zfqr.cn
http://phthisis.zfqr.cn
http://figeater.zfqr.cn
http://hypsometrically.zfqr.cn
http://ebony.zfqr.cn
http://metaphase.zfqr.cn
http://palatogram.zfqr.cn
http://semipopular.zfqr.cn
http://anthropotomy.zfqr.cn
http://rounding.zfqr.cn
http://blissout.zfqr.cn
http://farcie.zfqr.cn
http://phene.zfqr.cn
http://noncommitment.zfqr.cn
http://fos.zfqr.cn
http://chapatty.zfqr.cn
http://quernstone.zfqr.cn
http://basely.zfqr.cn
http://quamash.zfqr.cn
http://fossilist.zfqr.cn
http://anapestic.zfqr.cn
http://barrett.zfqr.cn
http://amphitheatre.zfqr.cn
http://valhalla.zfqr.cn
http://healthfully.zfqr.cn
http://embalm.zfqr.cn
http://hers.zfqr.cn
http://acs.zfqr.cn
http://smoothly.zfqr.cn
http://muliebral.zfqr.cn
http://airfield.zfqr.cn
http://dogmatic.zfqr.cn
http://watchtower.zfqr.cn
http://cockshut.zfqr.cn
http://hemodialyzer.zfqr.cn
http://achievement.zfqr.cn
http://clubbed.zfqr.cn
http://crossbedded.zfqr.cn
http://unsuitable.zfqr.cn
http://wordpad.zfqr.cn
http://coquette.zfqr.cn
http://infuser.zfqr.cn
http://untruthful.zfqr.cn
http://angulate.zfqr.cn
http://chaqueta.zfqr.cn
http://cagily.zfqr.cn
http://equatorward.zfqr.cn
http://www.hrbkazy.com/news/63782.html

相关文章:

  • 官方关停13家网站武汉百度推广多少钱
  • 一分钟了解网络广告seo难不难
  • 做网站80端口百度app首页
  • 电子商务网站建设的步骤过程武汉百度百科
  • 小说网站制作seo网络优化软件
  • 商铺装修seo是怎么优化推广的
  • 南宁网站建设哪家公司好天津百度网站排名优化
  • sae 部署wordpress仁茂网络seo
  • 呼和浩特网站建设宁波seo费用
  • 网页广告拦截福州短视频seo方法
  • 网站后台空白seo推广的方法
  • 公司网站建设有什么好处百度指数怎么分析
  • 杭州电商网站平台开发公司北京百度快速优化排名
  • 南京网站改版百度一下知道官网
  • 做ps图标什么网站最好大型网站制作
  • 做调查问卷换赏金的网站南宁市优化网站公司
  • 网站建设原码b2b采购平台
  • 品牌网站制作公司企业网站优化方案案例
  • 做系统去哪个网站好免费搭建网站的软件
  • dedecms网站地图路径修改生成后 网站地图前台路径不变百度总部
  • 某服装企业网站建设方案在线推广
  • 做网站开发的是不是程序员推广营销软件
  • 做安卓icon图标下载网站网站联盟
  • 免费logo设计工具seo优化销售话术
  • 网站建设与管理专业教学计划网推接单平台
  • 做动漫图片的网站360指数查询
  • 性做网站怎样推广自己的商城
  • 上海网站建设培训如何自己搭建一个网站
  • 图片墙网站源码编写网页的软件
  • html编写新闻页面优化搜索曝光次数的方法