SpringBoot的引言
Spring Boot是由Pivotal团队提供的全新框架
,其设计目的是用来简化Spring应用的 初始搭建以及开发过程
。该框架使用了特定的方式来进行配置
Spring Boot 全新框架 作用: 简化spring应用初始搭建和开发过程
如何简化: 开发人员使用springboot只要基于特定方式进行配置 简化spring使用
SpringBoot 微框架: 5分钟 完成之前ssm中环境
springboot(微框架) = springmvc(控制器) + spring core(项目管理)
SpringBoot的优势
-
-
嵌入的Tomcat,无需部署WAR文件
springboot 内嵌tomcat 应用跑在内嵌服务器 -
简化Maven配置,自动配置Spring Springmvc,没有XML配置
几个依赖-
用来springboot spring应用在无xml
-
SpringBoot的约定
springboot 基于maven做的(前提保证maven是装好并且IDEA配置好的)(面向接口编程)
约定:
1、springboot项目约定springboot项目中有且仅有一个入口类(class),类名:推荐 xxx(项目名)Application.java
a. 入口类必须放在所有子包之上
b. 入口类中必须有一个启动项目的main方法
2、springboot项目必须在项目的根目录中存在一个名字为application.yml 或者叫 application.properties 配置文件
名字必须是以application开头
项目架构:
src/main/java
com.shujia.
.entity 实体类
.dao 主要存放对数据做操作的实现类
.service 接口层
.controller 存放是页面与后端交互的接口层
Application.java -------------> 入口类 有且只有一个
src/main/resource 运行时配置文件
application.yml
//
application.properties
src/test/java 测试java代码
src/test/resource 测试配置文件
-
springboot 项目中必须在src/main/resources中放入application.yml(.properties)核心配置文件 名字必须为:application
-
springboot 项目中必须在src/main/java中所有子包之外构建全局入口类型,xxApplication,入口类一个springboot项目只能有一个
环境搭建
环境要求
# 1.System Requirements
JDK1.8+
MAVEN3.2+
Spring Framework 5.x+
springboot 2.5.0
# 2.ServletContainers:
Tomcat 9.0+
# 3.开发工具
IDEA 2021版本
最近使用idea 社区版发现不支持直接创建spring boot 程序,搜索发现需要安装spring-assistant 插件。但在idea直接搜索并 没有此插件。
后面了解到:
idea社区版 不支持 spring BOOT ,需要插件 ntellij-spring-assistant 。
官方插件库的spring-assistant 只支持到idea 2020.3 版本以前。
# SpringBoot三种搭建方式
1.maven手动搭建
2.通过IDEA搭建(最常用,也是最迅速的搭建方式,前提是网络要好,很容易出现网络不好的情况,可以使用下面的第三种方式)
IDEA社区版事不支持spring boot程序,搜索发现需要安装spring-assistant 插件。但在idea直接搜索并 没有此插件。
3.通过官网进行搭建(在第二种网络出现不好的情况下使用,--通过观察一般下午的时间段网络容易崩打不开)
网址是:https://start.spring.io/
环境搭建
环境要求
# 1.System Requirements
JDK1.8+
MAVEN3.2+
Spring Framework 5.x+
springboot 2.5.0
# 2.ServletContainers:
Tomcat 9.0+
# 3.开发工具
IDEA 2021版本
最近使用idea 社区版发现不支持直接创建spring boot 程序,搜索发现需要安装spring-assistant 插件。但在idea直接搜索并 没有此插件。
后面了解到:
idea社区版 不支持 spring BOOT ,需要插件 ntellij-spring-assistant 。
官方插件库的spring-assistant 只支持到idea 2020.3 版本以前。
新建项目中引入依赖
<!--继承springboot的父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<dependencies>
<!--引入springboot的web支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
引入配置文件
项目中 src/main/resources/application.yml
编写入口类
//在项目中如下的包结构中创建入口类 Application
/*
com
+| shujia
*/
运行main启动项目
o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
com.baizhi.Application : Started Application in 2.152 seconds (JVM running for 2.611)
//说明: 出现以上日志说明启动成功
注意:到这里项目环境已经搭建成功了,看看仅仅需要5分钟
建包并创建控制器
//在项目中创建指定的包结构
/*
com
+| shujia
+| controller */
访问项目
# 注意: springboot的项目启动默认项目名
- 访问路径: http://localhost:8080/hello/hello
修改内嵌服务器端口
server
修改应用名称
server
相关注解说明
注解:从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
# 入口类 SpringApplication
- SpringBootApplication: 全局入口类 有且只能有一个
- mian 函数参数可以在启动时指定jvm参数覆盖默认配置
# @SpringBootApplication 注解等价于:
- @SpringBootConfiguration 标识这是一个springboot的配置类,默认自定配置Spring环境
- @EnableAutoConfiguration 自动与项目中集成的第三方技术进行集成
- @ComponentScan 扫描入口类所在子包以及子包后代包中注解
配置文件
配置文件的拆分
说明: 在实际开发过程中生产环境和测试环境有可能是不一样的 因此将生产中的配置和测试中的配置拆分开,是非常必要的在springboot中也提供了配置文件拆分的方式. 这里以生产中项名名称不一致为例:
-
生产中项目名为:
springboot
-
测试中项目名为:
springboot_day1
-
端口同时为: 8080
# 主配置文件:
启动指定配置文件
说明: 往往在企业级开发过程中为SpringBoot应用启动时指定一个完整外部配置也是经常用到的,在SpringBoot中也提供这个方式来启动项目如:
# 1.创建一个完整的配置文件
# 2.启动时指定配置文件位置
工厂创建对象
创建单个对象
在springboot中可以管理单个对象可以直接使用spring框架中注解形式创建。
-
@Component
通用的对象创建注解-
@Controller
用来创建控制器对象 -
@Service
用来创建业务层对象 -
@Repository
用来创建DAO层对象-
以上注解都有value属性,value属性用来指定工厂中对象名称
-
-
# 2.通过工厂创建之后可以在使用处注入该对象
创建多个对象
如何在springboot中像spring框架一样通过xml创建多个对象,在SpringBoot中也提供了相同注解如@Configuration + @Bean
注解进行创建
-
@Configuration
代表这是一个spring的配置类相当于Spring.xml配置文件 -
@Bean
用来在工厂中创建这个@Bean注解标识的对象-
默认使用@Bean创建对象在工厂中唯一标识为方法名称
-
修改在工厂中对象标识可以在使用@Bean("工厂中名字")指定一个名字
-
# 1.管理复杂对象的创建
# 2.使用复杂对象
# 注意:
1.@Configuration 用来在工厂中一次性创建多个对象
2.@Component 用来创建单个对象
属性注入
基本属性注入
# 1.@Value 属性注入 [重点]
# 2.在配置文件中定义注入值
name
-
注意: 这里面map集合注入比较特殊
对象方式注入
注意: 这种方式必须提供SET方法
# 1. @ConfigurationProperties(prefix="前缀")
# 2. 编写配置文件
user
# 3. 引入依赖构建自定义注入元数据 不加也行
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
JSP模板集成
在SpringBoot框架中默认模板推荐使用Thymeleaf模板,这里我们优先讲与JSP模板集成
在main中手动的建webapp文件夹,放jsp文件
引入jsp的集成jar包
<!--c标签库-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--让内嵌tomcat具有解析jsp功能-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
引入jsp运行插件(最新的版本不用引入)
<build>
<finalName>springboot-demo2</finalName>
<!--引入springboot插件 可以正确打包 显示jsp-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
配置视图解析器
#在配置文件中引入视图解析器
spring
第一种方式使用插件启动访问JSP页面
第二种方式使用idea中指定工作目录启动 访问JSP
启动项目测试
http://localhost:8083/jsp
修改jsp无须重启应用
server
SpringBoot链接MySQL
在学习任何一个后端技术,如果不让数据库参与进来,那只能说在学习过程中都不算完整的。下面就简单的使用Spring Boot链接MySQL数据库。该例子中没有使用其他的持久化
1、引入MySQL依赖
<!--添加MySql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2、引入Spring JDBC依赖
<!--添加JDBC依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
3、配置MySQL链接
属性配置文件:
mysql.url=jdbc:mysql://192.168.40.110:3306/scott
mysql.username=root
mysql.password=123456
SpringBoot配置文件:
server
4、创建Service类
package com.shujia.service;
import com.shujia.Bean.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class DeptServiceImpl implements DeptService{