spring boot分层

这是一个分为两部分的系列,其中我将展示如何使用Spring Boot创建分层体系结构。

什么是分层体系结构:简而言之,当我们构建企业应用程序时,我们维护不同的层以封装特定于层的逻辑,这样就不会溢出到另一层。 当我们考虑企业应用程序时,我们可以想象该体系结构的三个重要层。

1. 用户界面 :与最终用户进行交互,向他们显示数据,接受用户输入,接受他们的命令等。

2. 业务层 :基于用户命令和从用户那里捕获的数据(AKA表单),它会做出特定于域的决策,例如如何处理数据,查找哪个表,如何处理数据。从数据库中获取,因此可以在UI中显示。

3. 持久层 :此层捕获数据并对其进行持久化,同样也捕获数据状态的任何更新,删除和更改,因此您可以将这一层视为维护特定于应用程序数据的状态。

无论您的应用程序处于启动还是关闭状态,它都将在提交后存储数据的状态。

通过分层体系结构,我们像所有代码一样在每一层上创建逻辑封装,有关UI的信息留在UI层中,有关业务逻辑的所有代码均留在业务层中,等等。

每一层都与其相邻的层通信,但是从不与不相邻的另一层通信。

因此,如果您的应用程序具有三层UI,即Business,DAO,UI与Business进行通信,Business与UI进行通信以及DAO和DAO与Business进行通信。 通过这种方式,我们可以减少耦合,使层可重复使用,并欢迎体系结构的未来变化。 每个层都有自己的模式,以适应将来的更改并使该层可重用。

我们都知道Spring为每一层提供了不同的组件,例如,对于UI,您可以使用Thymleaf或Spring模板或任何其他UI框架(如JSF);对于Business层,可以使用Controller和service;还可以在其中注入Struts等不同的框架它。 对于持久层,您可以使用Spring数据JPA,Hibernate,JDBC模板。 但是问题是您需要在pom.xml中添加所有插件/ Jars。 在类路径中找到依赖项的正确版本。 如果版本不匹配,它将无法正常工作。 另外,您还需要在Spring XML文件中添加许多Spring特定的批注或XML条目,以在分层体系结构中使用那些组件/插件,这是一种繁琐的方法。 另外,您需要打包它们并将它们部署在应用程序服务器中,因此需要许多手动干预。 Spring解决了这个问题,并提出了一个称为Spring Boot的解决方案。

Spring-boot按照约定优于配置进行工作 ”-这意味着您不必考虑配置条目,只需要注意业务逻辑,就可以在类路径中提到要使用的组件而无需考虑使用任何组件。聪明,它会理解您想要使用它并为您配置一个完全正常工作的组件。 假设您要在项目中使用JPA。 如果您导入Spring boot starter JPA模块,它将了解您要使用它,并会即时为您创建Spring模板的存储库和实用程序CRUD方法。 如果没有Spring-boot,则需要配置JPA模板,从模板启动会话工厂,获取会话等,而这在这里不是必需的,Spring Boot如此强大,可以为您做到这一点,当然,如果您想要自己控制配置,您可以覆盖它们并使用自己的配置。

在本教程中,我将向您展示如何使用Spring-boot逐步创建MVC分层体系结构,您会感到惊讶。 在五分钟之内,您就可以创建一个MVC架构,并启动它并运行,以前需要花费大量时间,并且在版本不匹配的情况下会花很多头。

由于这是一个分为两部分的系列,因此在第一部分中,我们将建立数据库,并使用JPA存储库将Employee数据插入数据库中。

在本教程中,我们将使用以下组件

1. H2数据库 :这是一个内存数据库,它将持久存储数据直到应用程序关闭。

2. Spring Data JPA :我们将使用Spring data JPA组件在数据库中进行CRUD操作。

3. Rest Controller :与传统的MVC不同, Rest Controller将以JSON格式显示数据,而不是将响应转发到View。

步骤1 :转到start.spring.io并通过选择Web,JPA,H2 Module下载模板项目。

步骤2:将该项目作为Maven项目导入eclipse。

步骤3:检查pom.xml,spring-starter-web,spring-starter-data-jpa,h2模块条目将在那里。 这些是Spring引导软件包,其中包含jpa和web的所有必需依赖项,并维护依赖jar的正确版本,因此不会出现版本不匹配的问题。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion><groupId>com.example</groupId>
<artifactId>layerdArchitechture</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging><name>layerdArchitechture</name>
<description>Demo project for Spring Boot</description><parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent><properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties><dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies><build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build></project>

步骤4:转到src / main / resources下的application.properties文件,并使h2控制台启用为true,这样我们就可以看到在h2数据库中插入的数据。

spring.h2.console.enabled=true

步骤5:让我们创建一个Employee实体。

package com.example.layerdArchitechture.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;@Entity
public class Employee {
@Id@GeneratedValue
private Long id;
private String name;
private String address;
private String sex;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", address=" + address + ", sex=" + sex + "]";
}}

步骤6:现在创建一个EmployeeRepositiry接口,该接口将扩展CrudRepository接口,即时运行Spring-boot创建一个实现并创建所有的Utility(crud)方法,我们只需要声明该接口就不需要做任何事情。

package com.example.layerdArchitechture.repository;import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository;
import com.example.layerdArchitechture.entity.Employee;@Repositorypublic interface EmployeeRepositiry extends CrudRepository<Employee, Long> {}

步骤7.现在创建一个Data Loader类,它将使用上述创建的存储库将少量员工插入H2数据库。 为此,我必须自动连接EmployeeRepository接口。 请在这里注意loadData方法。 我创建了一个员工列表,然后迭代该列表,并使用Java8中的lambda表达式将这些数据保存在H2数据库中。

package com.example.layerdArchitechture;import java.util.ArrayList;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.example.layerdArchitechture.entity.Employee;
import com.example.layerdArchitechture.repository.EmployeeRepositiry;@Component
public class InitDataLoader {
@Autowired
private EmployeeRepositiry rep;public void loadData() {
createData().forEach(
emp->{
rep.save(emp);
System.out.println("Successfully saved ::" + emp);
});}private List<Employee> createData() {List<Employee> employees = new ArrayList<Employee>();Employee emp = new Employee();
emp.setName("Shamik Mitra");
emp.setSex("M");
emp.setAddress("BagBazar");
Employee emp1 = new Employee();
emp1.setName("Samir Mitra");
emp1.setSex("M");
emp1.setAddress("BagBazar");
Employee emp2 = new Employee();
emp2.setName("Swastika Basu");
emp2.setSex("F");
emp2.setAddress("Baranagar");employees.add(emp);
employees.add(emp1);
employees.add(emp2);
return employees;
}}

步骤9:我们需要告诉我们的应用程序扫描所有Spring Bean,并找到JPA存储库和实体文件并将它们注册为Spring Bean,因此我们将使用两个特殊的注释

在Spring引导主类之上的@SpringBoot和@EnableJpaRepositories。 请注意,在@EnableJpaRepositories批注中,我提到了开始查找存储库和实体的根包。

package com.example.layerdArchitechture;
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EnableJpaRepositories("com.example.layerdArchitechture")
public class LayerdArchitechtureApplication {public static void main(String[] args) {
SpringApplication.run(LayerdArchitechtureApplication.class, args);
}@Bean
public CommandLineRunner loadData(InitDataLoader loader) {
return args->loader.loadData();
}
}

注意loadData方法,这是Java样式Bean配置,在这里我称为InitLoader的load data方法。 当应用程序启动时,将调用CommandLiner bean并将InitDataLoader作为Spring bean(IOC)注入,因此我可以期望在启动Spring Boot应用程序时将所有数据插入数据库。

步骤10:启动应用程序,我们可以看到员工已插入数据库中,以验证是否转到以下网址
http:// localhost:8080 / h2-console我们可以看到以下内容

结论 :我们已经使用Spring Boot成功插入了数据。 这里要观察的一件事:将数据插入数据库中,我们不必编写一行CRUD代码和JPA模板配置代码。 Spring Boot代表我们同样的身份。 在第二部分中,我将向您展示如何将软管数据公开为JSON格式,以便任何UI框架(Angular5)都将数据作为JSON使用或将这种分层体系结构用作微服务(需要进行一些更改以使其成为微服务组件),敬请期待。

翻译自: https://www.javacodegeeks.com/2018/10/layered-architecture-running-just-5-minutes-spring-boot-part-1.html

spring boot分层

spring boot分层_只需5分钟即可启动并运行分层架构:: Spring Boot第1部分相关推荐

  1. 只需5分钟即可启动并运行分层架构:: Spring Boot第1部分

    这是一个分为两部分的系列,其中我将展示如何使用Spring Boot创建分层架构. 什么是分层体系结构:简而言之,当我们构建企业应用程序时,我们维护不同的层以封装特定于层的逻辑,这样就不会溢出到另一层 ...

  2. red hat安装宝塔_只需几分钟即可安装Red Hat Container Development Kit(视频)

    red hat安装宝塔 自从我开始使用各种形式的OpenShift(例如带盒的Online,然后又作为容器化的图像)玩耍以来,没有什么比Red Hat Container Development Ki ...

  3. 深度学习所需显存_只需10分钟即可学习基本的Flexbox

    深度学习所需显存 by Justin Yek 贾斯汀·耶克(Justin Yek) 只需10分钟即可学习基本的Flexbox (Learn basic Flexbox in just 10 minut ...

  4. javascript核心_只需几分钟即可学习这些核心JavaScript概念

    javascript核心 Sometimes, you just want to learn something quickly. And reading through comprehensive ...

  5. 只需几分钟即可安装Red Hat Container Development Kit(视频)

    自从我开始使用各种形式的OpenShift(例如带盒的Online,然后又作为容器化的图像)玩耍以来,没有什么比Red Hat Container Development Kit(CDK)的可用性令我 ...

  6. flask 部署_只需10分钟!就能用Flask,Docker和Jenkins部署机器学习模型

    摘要: 一杯茶的功夫部署完成机器学习模型! 在生产环境中部署机器学习模型是数据工程中经常被忽视的领域.网上的大多数教程/博客都侧重于构建.训练和调整机器学习模型.如果它不能用于实际的预测,那么它又有什 ...

  7. 美分零钱_只需99美分即可获取完整的Android指南电子书[更新:已过期]

    美分零钱 The Complete Android Guide is a 280-page book chock full of every menu option, hidden settings, ...

  8. 安卓一键清理内存_只需一键,即可清理iPhone内存

    昨天一期<海外 Apple ID 不用注册,也能下载>文章评论中罗优秀同学提问:能否出个清理手机内存的方法,评论中需求很多,也有很多用户在后台留言评论,请求出一期清理手机内存教程,所以今天 ...

  9. 超简单,只需十分钟即可从App Store退款,附无法拒绝的退款理由

    首先说明退款条件和注意事项: 退款仅限90天内,超时则无法申请: 退款是否通过,取决于退款理由,建议写到无法拒绝: 软件.内购和订阅内容都可以申请退款: App Store 不能反复退款,申请退款需谨 ...

最新文章

  1. 基于libmad库的MP3解码简析
  2. 推荐系统技术演进趋势:召回-排序-重排
  3. java 市场_java市场前景怎样?
  4. 计算机软件技能高考好考么,湖北技能高考:上不了本科,优先考虑这4所一档高职...
  5. 大数据管理:构建数据自己的“独门独院”
  6. Jquery 提交 乱码的问题
  7. 中文谐音怎么读_日语零基础学习,谐音法巧记日语50音图发音
  8. mac系统历史版本汇总_苹果发布会 WWDC20 主要更新汇总
  9. 防止ARP欺骗的方法
  10. ColorDict词典下载
  11. 错误了 请在微信客户端打开连接服务器,Jmeter打开url时提示“请在微信客户端打开链接问题”...
  12. 学术英语理工(第二版)Unit3课文翻译
  13. VGG16各层处理过程
  14. 成功解决: return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  15. cocos2d-x 关于旋转和移动的一点小技巧
  16. 怎么办理质量管理体系认证证书ISO9001?
  17. Flow公链 |动态交易手续费
  18. 孙子兵法与36计(一)
  19. 美丽童行|与妈妈失联三年,留守儿童:学习是我唯一的出路
  20. 16 ,spark sql : 开窗函数 ,top3

热门文章

  1. 牛客网【每日一题】4月30日题目精讲 换个角度思考
  2. CF809D-Hitchhiking in the Baltic States【FhqTreap】
  3. bzoj#4722-由乃【倍增,抽屉原理,bitset】
  4. CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
  5. YbtOJ#883-最大的割【带修线性基】
  6. UOJ#284-快乐游戏鸡【长链剖分,线段树】
  7. CF1419E-Decryption【数论,dfs】
  8. jzoj6288-旋转子段【优雅的暴力】
  9. 2018/7/19-纪中某C组题【jzoj3461,jzoj3462,jzoj3463,jzoj3464】
  10. 2021牛客暑期多校训练营8 F-Robots(bitset优化dp)