进化,从Spring到SpringBoot

1,020 阅读8分钟

文章目录

一、前言

从spring到springboot的三个原因
Spring本身配置的重量化
Spring web项目的配置太多
微服务的萌芽阶段,需要一个轻量级框架

idea快捷键 search everything double shift

SSM与springboot的关系:
springboot并不是SSM的升级,而是spring+springMVC的简化,即
springboot == SSM 错误
springboot + Mybastis == SSM 正确
即,使用springboot,还是需要Mybatis的。

二、Spring项目

2.1 Spring步骤

1、创建一个maven项目结构
2、pom.xml添加两个依赖:spring-context的依赖、spring-webmvc的依赖
3、web.xml DispatcherServlet
4、启动一个springmvc的配置,Dispatcher-servlet.xml
5、创建一个controller,发布一个http请求
6、发布到jsp/servlet容器

Spring需要 1 2 3 4 5 6,但是Springboot仅需要 5 黑体标粗。

2.2 Spring具体实现

1、基于maven搭建webapp项目

在这里插入图片描述

2、然后,pom.xml添加Spring需要的依赖

在这里插入图片描述

3、web.xml中添加servlet

在这里插入图片描述

注意:classpath就是resources目录

4、webapp同级目录下,新建resources/dispatcher.xml

在这里插入图片描述

在这里插入图片描述

servlet-dispatcher.xml 中注解扫描、视图解析
在这里插入图片描述

在这里插入图片描述

5、新建源码目录 source root

在这里插入图片描述

servlet-dispatcher.xml 配置开启注解扫描

在这里插入图片描述
6、部署到tomcat

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7、运行成功,localhost:8080/test,controller中的return值返回至前端

在这里插入图片描述

2.3 小结

①pom.xml导入两个依赖spring-context spring-webmvc;
②web.xml 配置 servlet-dispatcher.xml 或 springmvc-servlet.xml (名称自定义),新建resources/servlet-dispatcher.xml 或 springmvc-servlet.xml;
③工程文件java 设置controller。

2.4 spring整合mybatis

2.4.1 导入五个依赖、构建好三层

在这里插入图片描述

在这里插入图片描述

2.4.2 完成dao层,User.java Mapper.java Mapper.xml

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4.3 service层,IUserService.java UserServiceImpl.java

在这里插入图片描述

在这里插入图片描述

【源码解析002】告诉我们,一定要告诉Spring ioc容器具体类,所以这里ServiceImpl实现类需要注解,但是Service接口不用注解
在这里插入图片描述

2.4.4 完成controller层,UserController.java

在这里插入图片描述

2.4.5 spring配置文件、springmvc配置文件、数据库表设计

在这里插入图片描述

在这里插入图片描述

数据库表设计

在这里插入图片描述

2.4.6 运行成功

在这里插入图片描述

2.5 SSM小结

附1:IOC和DI
IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象。
DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。

附2:spring配置文件和springmvc配置文件
SSM两个配置文件(web.xml指定两个配置文件 servlet-dispatcher.xml/springmvc-servlet.xml 和 mybatis xml配置)
第一个配置文件,springmvc的配置文件,对于web.xml将拦截到的请求(一般是所有请求)转发到ServletDispatcher对应的xml配置文件,一般是包含视图解析器扫描spring注解component-scan,视图解析器属于springmvc,扫描spring注解属于spring。视图解析器只有在controller返回ModelAndView,需要打开jsp页面时定位jsp页面使用,如果controller返回值字符串String和类对象,前端直接显示,没用。扫描spring注解component-scan主要是扫描@Controller @Service @Repository,使controller service entity 不再 applicationContext.xml / servlet-Dispatcher.xml 中配置,还是用@Autowired/@Resource 自动注入,不再需要setter-getter,主要是controller service
第二个配置文件,spring的配置文件,数据库连接四个常量 + MapperScan + Mapper.xml 路径

三、Springboot项目

3.1 Springboot项目引入

springboot 在约定优于配置理念下,是 springframework 的脚手架,快速高效的构建应用。
springboot starter-web的jar,会自动内置一个tomcat,不再需要配置tomcat了。

在这里插入图片描述

3.2 Springboot具体实现

在这里插入图片描述

在这里插入图片描述

注意1:构建springboot项目之前,配置好全局maven。idea 配置全局默认maven ,File/Other Settings/Default Settings…/Maven, File/Settings/Maven 只能配置当前项目的maven,新建springboot项目要先配置好默认的Maven相关,因为在新建springboot项目的时候无法配置。
注意2:构建springboot项目开始:idea新建springboot项目的时候,可以使用 start.aliyun.com/ 或者 start.spring.io 或者 start.spring.io ,笔者这里使用 start.spring.io
注意3:启动Springboot项目报错:IDEA运行Springboot报错,找不到org.springframework.context.ConfigurableApplicationContext类,可删除本地〜/ .m2 / repository / org / springframework下的文件夹并运行。

3.3 Springboot约定优于配置-Springboot的四大约定

Springboot是一个依赖优于配置理论的产物,主要包括四个约定。
1、只要依赖spring-boot-starter-web的jar包,就会自动内置一个tomcat容器(可以替换)
2、项目结构的约定
3、默认提供配置文件application.properties
4、spring-boot-starter-web的jar包提供自动依赖/启动依赖,如果是一个webstarter,默认认为你是构建一个spring mvc的应用

3.3.1 只要依赖spring-boot-starter-web的jar包,就会自动内置一个tomcat容器(可以替换)

像上面的springboot的项目一样,自带tomcat容器,不需要额外提供,值得注意的是,springboot只是模式tomcat服务器,可以替换,一般来说,springboot可以支持四种服务器,分别是 tomcat jetty Undertow Reactor,其中,前三种是Servlet服务器,最后一种是Reactive 服务器。
在这里插入图片描述

3.3.2 项目结构的约定

springboot第二个约定,提供一个同一个项目结构,源工程均是src/main/java
resources资源目录下两个目录一个文件,static目录存放前端静态文件,templates目录存放前端模板(static中放静态页面html,而templates中放动态页面jsp) ,application.properties用于全局常量配置
在这里插入图片描述

其中,static目录存放前端静态文件,templates目录存放前端模板,application.properties存放全局常量配置信息。

3.3.3 默认提供配置文件application.properties

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.3.4 spring-boot-starter-web的jar包提供自动依赖/启动依赖,如果是一个webstarter,默认认为你是构建一个spring mvc的应用

在springboot项目中,仅依赖spring-boot-starter-web这个jar包,但是却可以完成整个web操作,这是因为其他的jar包依赖都使用 spring-boot-starter-web 自动依赖了,并且都已经匹配上正确的版本,不需要程序员关心。

在这里插入图片描述
在这里插入图片描述

在使用springboot项目的时候,我们再也不用担心少导入的哪个依赖,或者依赖之间的版本匹配问题了,spring-boot-starter-web的自动依赖也是它的一个约定。

在springboot中,只要是使用了spring-boot-starter-web,就默认你是一个spring mvc应用,把需要的依赖自动配置给你了。

3.4 Springboot整合mybatis

3.4.1 导入两个依赖、构建好三层、配置好数据库四个

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.4.2 完成dao层,dao.entity.User.java dao.mapper.UserMapper.java resources.UserMapper.xml

在这里插入图片描述

z
在这里插入图片描述

UserMapper.xml尽量放在resources目录下,如果放在src/main/java/com/example/demo/dao/mappers 源码目录下,默认是不会被打包的,放在resources目录下,要在application.properties文件中指定一下。

在这里插入图片描述

3.4.3 完成services层,services.IUserService.java services.impl.UserServiceImpl.java

在这里插入图片描述
在这里插入图片描述

3.4.4 完成controller层,controller.HelloController.java

在这里插入图片描述

注意,一般404都是controller这里的GetMapping错了。

3.4.5 数据库表设计和启动类

在这里插入图片描述

在这里插入图片描述

启动类中为什么要配置@ComponentScan注解:因为springboot只扫描启动类所在包及其子包下面的注解,该项目中启动类在com.example.demo下面,可以去掉@Component(“com.example.demo”)这个注解,如下:
在这里插入图片描述
启动类中为什么要配置@MapperScan注解:@ComponentScan 只能扫描指定目录下spring中的注解,要扫描ibatis中的@Mapper注解,所以这里使用@MapperScan

3.4.6 运行成功

在这里插入图片描述

3.5 springboot小结

spring +springmvc+mybatisspringboot +mybatis
web.xml指定contextConfigLocation和DispatcherServlet配置文件没有web.xml文件,没有DispatcherServlet配置文件,没有contextConfigLocation配置文件
视图解析器在DispatcherServlet配置文件中没有视图解析器
spring注解扫描器本项目在DispatcherServlet配置文件中(也可以让springmvc扫描Controller,spring扫描service component/repository)spring注解扫描在启动类中
数据库四个属性contextConfigLocation配置文件中application.properties文件中
Mapper类扫描contextConfigLocation配置文件中mapper注解扫描在启动类中
Mapper.xmlcontextConfigLocation配置文件中application.properties文件中

附:springboot没有视图解析器,如果完成页面跳转?

回答:两种方式,static和templates

新建springboot工程,导入thymeleaf依赖
在这里插入图片描述
四种方式
在这里插入图片描述

注意,controller的方法名尽量不要与页面名称重合,比如这里,都加上了say前缀,sayhello sayhello2 sayhello3 sayhello4

方式1运行成功:

在这里插入图片描述
方式2运行成功:
在这里插入图片描述
方式3运行成功:
在这里插入图片描述
方式4运行成功:

在这里插入图片描述
在这里插入图片描述

四、小结

Springboot是Spring的脚手架,完成对Spring封装,使后台开发更加高效。

spring工程代码:download.csdn.net/download/qq…
springboot工程代码:download.csdn.net/download/qq…
springboot页面跳转工程代码:download.csdn.net/download/qq…