0


大数据技术SpringBoot框架---实现前后端分离(MVC)对数据进行可视化

文章目录

Spring Boot

1、什么是Spring Boot

     Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

2、Spring Boot 的特点

Spring Boot 具有以下特点:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

Spring Boot 可以以jar包的形式独立运行,Spring Boot 项目只需通过命令"java-jar xx.jar" 即可运行。

(2)内嵌Tomcat或Jetty等Servlet容器;

Spring Boot 使用嵌入式的 Servlet 容器 (例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成WAR包。

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

Spring Boot 提供了一系列的 “start” 项目对象模型 (POMS) 来简化 Maven 配置。

(4)尽可能自动配置Spring容器;

Spring Boot 提供了大量的默认自动配置,来简化项目的发展,开发人员也通过配置文件修改默认配置。

(5)提供准备好的特性,如指标、健康检查和外部化配置;

Spring Boot 可以对正在运行的项目库提供监控。

(6)绝对没有代码生成,不需要XML配置

Spring Boot 不需要任何xml配置即可实现Spring 的所有配置。

3、SpringBoot项目结构

如果从一个用户访问一个网站的情况来看,对应着项目代码结构来分析,可以贯穿整个代码分层

对应代码目录的流转逻辑就是:

4、Spring Boot 分层

1、Dao 层

     **Dao**层主要做数据持久层的工作,负责数据库进行联络的一些任务都封装在此。**Dao**层的设计:首先是设计Dao层的接口,然后再**Spring**的配置文件中定义此接口的实现类,然后就可以再将模块中调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是哪个类,显得结构非常清晰,**dao**层的数据元配置,以及有关数据库连接参数都在**Spring**配置文件中进行配置。

2、Service 层

     **Service**层主要负责业务模块的应用设计。**Service**层的设计:同样是首先设计接口,再设计其实现类,接着在**Spring**的配置文件中配置其实现的关联。这样我们就可以在应用中调用**service**接口来进行处理。**service**层的业务实现具体要调用已定义的**dao**层接口,封装**service**层业务逻辑有利于通过的业务逻辑的独立性和重复利用性。程序显得非常简洁。

3、Controller 层

     **Controller** 层,负责具体的业务模块流程的控制,在此层要调用**service**层的接口来控制业务流程,控制的配置也同样是在**Spring**的配置文件里进行,针对具体的业务流程,会有不同的控制器。我们具体的设计过程可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块。这样不仅使程序结构变得清晰,也大大减少了代码量。

4、view 层

     **view**层与控制层结合比较紧密,需要二者结合起来协同开发。**view**层主要负责前台**jsp**页面的显示。

5、Entity 层

     **Entity**层是实体层,也就是所谓的model,也称**pojo**层数据库在项目中的类,该文件包含实体类的属性和对应属性的**setXxx()**、**getXxx()** 方法。

6、它们之间的关系

     **service**层是建立在**Dao**层之上的,建立了Dao层之后才可以建立**Service**层,而**Service**层又是在**Controller**层之下的,因而**Service**层应该既调用**Dao**层的接口,又要提供接口给**Controller**层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个**Service** 接口,每个接口分别封装各自的业务处理方法。

7、总结

     **Controller**层叫做控制层,负责请求转发,接受页面过来的参数,传给**Service**处理,接到返回值,再传给页面。即用于接口暴露。

     **Service**层叫做服务层,被称为服务,粗略的理解就是对一个或多个**DAO**进行的再次封装,封装成一个服务。即**Service**层用于逻辑处理,**service**层专注业务逻辑,对于其中需要的数据库操作,都通过**Dao**去实现。

     **Dao**层叫做数据访问层,全称为**data access object**,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增、删、改、查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。

     **View**层叫做表示层,此层与控制层结合起来协同工作。**View**层主要负责前台**jsp**页面的表示。

​ 表示层(View\Web) 调用 控制层(Controller),控制层(Controller)调用业务层(Service),业务层(Service)调用数据访问层(Dao)Dao面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出Dao层,然后根据具体的业务逻辑进一步封装Dao层成一个Service层,对外提供成一个服务。


配置开发环境

  在使用**Spring Boot**进行开发之前,第一件事就是配置好开发环境。这里我们以Windows操作系统为例,如果您使用的是其它操作系统,请对照其相关设置进行操作。
   工欲善其事,必先利其器IDE (集成开发环境) 的选择相当重要,目前市面上有很多优秀的IDE开发工具,例如IntelliJ IDEA、Spring Tools、Visual Studio Code 和 Eclipse 等等,那么我们该如何选择呢?

这里我们极力推荐大家使用 IntelliJ IDEA,因为相比于与其他 IDE,IntelliJ IDEA 对 Spring Boot 提供了更好的支持。
Spring Boot 版本及其环境配置要求如下表。

  • 在 Java 官方网站下载 JDK 8.0 及以上版本,JDK 的安装以及环境配置请参考 Java JDK下载与安装教程 和 Java JDK环境变量配置 。
  • Maven 3.x 的下载安装及配置过程,请参考 Maven 安装与配置。
  • 浏览器访问 IntelliJ IDEA 官方下载页面,下载并安装 IntelliJ IDEA。

创建 Spring Boot 项目

开发环境配置完成后,接下来,我们就可以通过 Intellij IDEA 创建一个 Spring Boot 项目了。

Intellij IDEA 一般可以通过两种方式创建 Spring Boot 项目:

  • 使用 Maven 创建
  • 使用 Spring Initializr 创建
使用 Maven 创建

1.使用 IntelliJ IDEA 创建一个名称为 SpringBootDemoTest的 Maven 项目,创建过程请参考 IDEA 新建 Maven 项目。
**2. 在该 Maven 项目的 pom.xml 中添加以下配置,导入 Spring Boot 相关的依赖。 **

<project><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!--添加Springmvc依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- springBoot JPA的起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.4.RELEASE</version><configuration><fork>true</fork></configuration></plugin></plugins></build></project>

3、新建自己的包,新建一个名为SpringBootApplication的主启动程序

此时,几乎所有的准备工作都已经准备就绪,我们可以在没有编写任何代码的情况下,直接将在Spring Boot 项目运行起来。

启动 Spring Boot

默认情况下,Spring Boot 项目会创建一个名为[***Application]的主程序启动类,该类中使用了一个组合注解@SpringBootApplication,用来开启Spring Boot 的自动配置,另外该启动类中包含一个main()方法,用来启动该项目。

SpringBoot的主程序启动类代码如下:

packagecom.liangzai;importorg.springframework.boot.SpringApplication;/**
 * @author liangzai
 * @SpringBootApplication 是Spring Boot 项目的核心注解,目的是开启自动配置
 */@org.springframework.boot.autoconfigure.SpringBootApplicationpublicclassSpringBootApplication{publicstaticvoidmain(String[] args){//启动Spring应用SpringApplication.run(SpringBootApplication.class, args);}}

直接运行启动类SpringBootApplication中的main()方法,便可以启动该项目,运行结果如下。

Spring Boot 项目SpringBootApplication 运行日志
注意:SpringBoot内部集成了 Tomcat,不需要人为手动配置TomCat,开发者只需要关注具体的业务逻辑即可。

加载数据库配置文件

虽然我们的SpringBoot的日志是启动了,但是这里会出现一个错误,需要我们手动在resource资源目录中加载一个名为application.properties的数据库配置文件。

application.properties

# 对MySQL连接进行配置
spring.datasource.url=jdbc:mysql://master:3306/springbootdemo?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

当我们将MySQL数据库配置文件加载完毕之后我们再来运行一下

端口占用解决办法

Verify the connector’s configuration, identify and stop any process that’s listening on port 8080, or configure this application to listen on another port.
翻译:验证连接器的配置,识别并停止正在侦听端口20000的任何进程,或将该应用程序配置为侦听另一个端口。

原因

由于之前使用改端口号的程序不正常关闭,导致端口并未释放,需要手动释放

解决方法

方法一:

直接重启,一般可以解决该问题,如果重启比较麻烦,可以使用下面的方法

方法二:

1、进入cmd,执行命令:[netstat -ano]

2、在窗口中继续输入:[netstat -aon|findstr “端口”],这里的提示的端口为8080,那么就输入命令为【netstat -aon|findstr “8080”】,回车之后就可以看见列表中的PID。根据PID在电脑的任务管理器中查看对应的占用程序,然后将其关闭即可。

3、我们可以看到占用8080这个程序进程的ID:26304,继续输入命令【tasklist|findstr “26304”】,26304就是进程ID,现在知道是哪个进程占用的我们就可以采取相应措施进行解决了。

然后我们在浏览器地址栏访问"localhost:8080"

显示出这个页面就证明我们Tomcat访问localhost:8080是通的


新建Entity、Dao、Service、Controller层

在Entity实体层中新建Student类

这里我们再加入一个maven依赖lombok

点击File—Setting设置界面,开启AnnocationProcessors:
开启该项是为了让Lombok注解在编译阶段起到作用

  • @Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。
  • @NoArgsConstructor:生成无参构造器
  • @AllArgsConstructor:生成全参构造器

packagecom.liangzai.Entity;importlombok.AllArgsConstructor;importlombok.Getter;importlombok.NoArgsConstructor;importlombok.Setter;importjavax.persistence.*;/**
 * @author liangzai
 * @version 1.0
 * Entity实体层,也就是所谓的model,也称pojo层数据库在项目中的类,
 * 该文件包含实体类的属性和对应属性的setXxx()、getXxx()方法
 * @Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;
 * 作用于成员变量上,生成该成员变量的getter/setter方法。
 * 可以设定访问权限及是否懒加载等。
 * @Getter 注解 定义getXxx()方法
 * @Setter 注解 定义setXxx()方法
 * @NoArgsConstructor 注解 定义无参的构造方法
 * @AllArgsConstructor 注解 定义有参的构造方法
 * @Entity 注解 表明是一个实体类
 * @Table 注解 对应的数据表名
 * @Id 注解 主键
 * @GeneratedValue 注解 主键生成策略 这里用到的是描述id自增
 * @Column 注解 映射表对应的字段名
 */@Getter@Setter@NoArgsConstructor@AllArgsConstructor@Entity@Table(name ="student")publicclassStudent{@Id//描述id自增@GeneratedValue(strategy =GenerationType.IDENTITY)privateInteger id;privateString name;privateInteger age;privateString gender;privateString clazz;//属性名一般同数据库中表的列名保持一致,不一致时可以使用@Column注解@Column(name ="sum_score")privateInteger sum_score;}

至此我们Entity实体层就编写完毕了


在Dao数据持久层新建StudentRepository接口

使用Dao数据持久层进行封装

packagecom.liangzai.Dao;importcom.liangzai.Entity.Student;importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.stereotype.Repository;/**
 * @author liangzai
 * @version 1.0
 * Dao层主要做数据持久层的工作,负责数据库进行联络的一些任务都封装在此。
 * Dao层的设计:首先是设计Dao层的接口,然后再Spring的配置文件中定义此接口的实现类,
 * 然后就可以再将模块中调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是哪个类,
 * 显得结构非常清晰,dao层的数据元配置,以及有关数据库连接参数都在Spring配置文件中进行配置。
 * @Repository 注解 修饰哪个类,则表名这个类具有对对象进行CRUD(增删改查)的功能。
 */@Repository//继承JpaRepository,指定一个泛型Student,和主键的类型IntegerpublicinterfaceStudentRepositoryextendsJpaRepository<Student,Integer>{}

在Service业务服务层上新建StudentService类

该类可以根据需求实现对student信息进行CRUD(增删改查)等功能

packagecom.liangzai.Service;importcom.liangzai.Dao.StudentRepository;importcom.liangzai.Entity.Student;importorg.springframework.stereotype.Service;importjavax.annotation.Resource;importjava.util.List;/**
 * @author liangzai
 * @version 1.0
 * @return 返回所有MySQL中所有的student信息
 * 该类可以根据需求实现CRUD(增删改查)等功能
 * Service层主要负责业务模块的应用设计。
 * Service层的设计:同样是首先设计接口,再设计其实现类,
 * 接着在Spring的配置文件中配置其实现的关联。这
 * 样我们就可以在应用中调用service接口来进行处理。
 * service层的业务实现具体要调用已定义的dao层接口,
 * 封装service层业务逻辑有利于通过的业务逻辑的独立性和重复利用性。
 * 程序显得非常简洁。
 * @Service 注解 用于类上,标记当前类是一个service类,
 * 加上该注解会将当前类自动注入到spring容器中,
 * 不需要再在applicationContext.xml文件定义bean了
 * @Resource 注解 默认安照名称进行装配,名称可以通过name属性进行指定,
 * 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,
 * 如果注解写在setter方法上默认取属性名进行装配。
 * 当找不到与名称匹配的bean时才按照类型进行装配。
 * 但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配.
 */@ServicepublicclassStudentService{@Resource//引用Dao接口privateStudentRepository studentRepository;//把所有的student信息取出来//最终返回MySQL的数据,用集合去接收student类的所有信息publicList<Student>findASll(){//返回所有MySQL中所有的student信息return studentRepository.findAll();}}

在Controller层新建StudentController类

此时我们需要先在common包里面新建一个Result类

新建common包,并新建一个Result类

该类用来创建返回对象实体(泛型)、返回结果数据格式封装
说明:code为状态码、msg为提示信息、data为返回的数据

packagecom.liangzai.common;importlombok.Getter;importlombok.NoArgsConstructor;importlombok.Setter;/**
 * @param <T> 定义泛型传data数据,获取不同的响应状态及返回值
 * @author liangzai
 * @version 1.0
 * 该类用来创建返回对象实体(泛型)、返回结果数据格式封装
 * 说明:code为状态码、msg为提示信息、data为返回的数据
 * @Getter 注解 定义getXxx()方法
 * @Setter 注解 定义setXxx()方法
 * @NoArgsConstructor 注解 定义无参的构造方法
 */@Getter@Setter@NoArgsConstructorpublicclassResult<T>{privateString code;privateString msg;privateT data;//定义泛型方法,传datapublicResult(T data){this.data = data;}//请求成功 不反回数据(静态方法)publicstatic<T>Result<T>success(){Result rs =newResult<>();
        rs.setCode("200");
        rs.setMsg("ok");return rs;}//请求成功 返回数据(静态方法)publicstatic<T>Resultsuccess(T data){Result<T> rs =newResult<T>(data);
        rs.setCode("200");
        rs.setMsg("ok");return rs;}//请求失败(静态方法)publicstatic<T>Result<T>error(String code,String msg){Result rs =newResult<>();
        rs.setCode(code);
        rs.setMsg(msg);return rs;}}

200的状码如图所示

404状态码如图所示

StudentController

packagecom.liangzai.Controller;importcom.liangzai.Entity.Student;importcom.liangzai.Service.StudentService;importcom.liangzai.common.Result;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjavax.annotation.Resource;importjava.util.List;/**
 * @author liangzai
 * @version 1.0
 * Controller层,负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程,
 * 控制的配置也同样是在Spring的配置文件里进行,针对具体的业务流程,会有不同的控制器。
 * 我们具体的设计过程可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块。
 * 这样不仅使程序结构变得清晰,也大大减少了代码量。
 * @RestController 注解 将数据以JSON格式返回
 * @RequestMapping 注解 在SpringMVC中使用@RequestMapping来映射请求
 * @Resource 注解 默认安照名称进行装配,名称可以通过name属性进行指定,
 * 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,
 * 如果注解写在setter方法上默认取属性名进行装配。
 * 当找不到与名称匹配的bean时才按照类型进行装配。
 * 但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配.
 * @GetMapping 组合注解 将HTTP Get请求映射到特定的处理方法上。
 */@RestController//将数据以JSON格式返回@RequestMapping("/stu")publicclassStudentController{@ResourceprivateStudentService studentService;@GetMappingpublicResult<List<Student>>findAll(){List<Student> list = studentService.findAll();returnResult.success(list);}}

这时我们再输入[http://localhost:8080/stu] 运行一下

这时我们发现返回200 ok 请求成功了

{"code":"200","msg":"ok","data":[]}

在resource目录下新建static目录,用来实现前后端分离的view层

这里我们使用第三方工具Element来从网上找一个可以提供我们前端可视化的模板

我们找到对应需要的模板,复制下来修改参数即可

static目录结构如下

由于前端代码量太大,这里就不作展示

可视化效果如下

这里可视化只是实现了查询效果,今后可以实现删除、添加、等功能(很简单,加对应的注解即可实现)


到底啦!给靓仔一个关注吧(●’◡’●)


本文转载自: https://blog.csdn.net/hujieliang123/article/details/122566682
版权归原作者 liangzai2048 所有, 如有侵权,请联系我们删除。

“大数据技术SpringBoot框架---实现前后端分离(MVC)对数据进行可视化”的评论:

还没有评论