1,概述
SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC,data-jpa等常用的框架封装到了一起,帮助你隐藏这些框架的整合细节,实现敏捷开发。
1、SpringBoot是基于SpringMVC无配置文件(纯Java)完全注解化+内置tomcat-embed-core实现SpringBoot框架,Main函数启动。
2、SpringBoot核心快速整合第三方框架原理:Maven继承依赖关系。springboot 通过引用spring-boot-starter-web依赖,整合SpingMVC框架。只需要引用一个jar包,就可以通过Maven继承的方式引用到Spring-aop,Spring-beans,Spring-core,Spring-web等相关依赖。
2,springboot项目入门
1,1使用idea项目搭建(如下)
src的目录结构)(一定注意启动类和其他类是同级关系)
-src
-main
-java
-包名
启动类.java # 需要将controller类,放在启动类的子包中或者同级包下
-resources
-static # 存放静态资源的
-templates # 存储模板页面的
application.properties # SpringBoot提供的唯一的配置文件
-test # 只是为了测试用的
1,2导入项目依赖,和简单项目部署实现
因为所有的依赖都被springboot整合好了所以当我们要部署一个web项目只要修改一下内容。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 将上述内容修改为下面的效果 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
编写controller
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello SpringBoot!";
}
}
因为spring整合了tomcat并且所有的启动都经过项目自带的main方法启动
注意这个文档需要将controller类,放在启动类的子包中或者同级包下
@SpringBootApplication//这个就是一个配置类属于@configuration下的
@MapperScan("com.hfqf.springboot.mapper")//扫描mapper接口所在的包(结合ssm:和接口扫描的功能一样)
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
1.3yml配置文件的设置
这里面是和ssm里面的配置所对应的:设置注解扫描,数据库,视图解析,和别名等设置
server:
port: 80
#配置连接池及连接数据库
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///2002-1?serverTimezone=UTC
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
mvc:
view:
prefix: /WEB-INF/view/
suffix: .jsp
#配置springmvc的视图解析器前后缀
#配置mybatis,告诉mybatis映射文件扫描,别名的设置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.hfqf.springboot.pojo
3,SpringBoot常用注解【重点
】
1 @Configuration和@Bean
- 之前使用SSM去开发时,在xml文件中编写bean标签,但是SpringBoot不推荐使用xml文件。
- @Configuration注解相当于beans标签
- @Bean注解相当于bean标签
- id=“方法名 | 注解中的name属性(优先级更高)”
- class=“方法的返回结果”
@Configuration // 代表当前类是一个配置类,一般用来放工厂类
public class UserConfig {
@Bean(name = "user1") // 构建一个实例,放到spring容器中
public User user(){
User user = new User();
user.setId(1);
user.setName("张三");
return user;
}
/*
<beans ....> @Configuration
<bean id="user1" class="com.qf.firstspringboot.entity.User" />
</beans>
*/
}
2 @SpringBootApplication
@SpringBootApplication就是一个组合注解:
- @SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。
- @EnableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesLoader的类,加载META-INF/spring.factories配置类(已经开启的),通过SpringFactoriesLoader中的load方法,以for循环的方式,一个一个加载。
- 好处:无需编写大量的整合配置信息,只需要按照SpringBoot提供好了约定去整合即可。
- 坏处:如果说你导入了一个starter依赖,那么你就需要填写他必要的配置信息。
- 手动关闭自动装配指定内容:@SpringBootApplication(exclude = QuartzAutoConfiguration.class)
- @ComponentScan就相当于<context:component-scan basePackage=“包名” />,帮助扫描注解的。不在同一个包下才用注解扫描
- @mapperscan 接口扫描(相当于ssm中对mapper接口的扫描)
4,SpringBoot常用配置;实现各种功能【重点
】
1 SpringBoot的配置文件格式
SpringBoot的配置文件支持properties和yml,甚至他还支持json。
更推荐使用yml文件格式:
- yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置
- yml文件,相比properties更轻量级一些
yml文件的劣势:
- 严格遵循换行和缩进
- 在填写value时,一定要在: 后面跟上空格
.2 多环境配置(实现不同的开发环境)
在application.yml文件中添加一个配置项:
spring:
profiles:
active: 环境名
在resource目录下,创建多个application-环境名.yml文件即可
在部署工程时,通过 java -jar jar文件 --spring.profiles.active=环境(例如在桌面运行时直接这样指定环境即可,在linux中部署也是一样的)
因为项目默认是只会访问application.yml文件,所以application.yml中只要指定所要的环境就能直接访问到环境对应的端口。
3 引入外部配置文件信息
1.(接收一个配置信息)和传统的SSM方式一样,通过@Value的注解去获取properties/yml文件中的内容。
》比如是在。xml文件中配置一个文件的路径;
》只要在controller里面通过@Value加上配置名获取到配置,和是ssm一样设为类的私有属性,并通过设置handeler方法实现访问,把得到的配置信息作为返回值即可。
2.(多个配置信息)如果在yml文件中需要编写大量的自定义配置,并且具有统一的前缀时,采用如下方式
1》,先创建。yml文件指定好文件名和所要的配置键值对
2》,写一个配置类,通过注解@ConfigurationProperties(prefix = “aliyun”)把以xxx未开头的信息加载到配置类中,再把当前的配置类注入到容器中,最后以配置中的键为属性,并私有化属性,同时@data提供get/set方法。
3》用@autowired注解把配置类加载到controller里面(和引入单个外部配置不一样单个是用@value,)再通过设置handeler方法实现访问,把得到的配置信息作为返回值即可。
// Java程序(controller里面)
@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperties {
private String xxxx;
private ... ...;
}
// 配置文件中的内容
aliyun:
xxxx: xxxxx
XXXX:XXXXX
...
4 热加载(当修改项目的一些信息之后需要重启项目对于大项目花费时间特别多)
4.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
4,2 settings配置
4.3重新构建工程
5,SpringBoot整合Mybatis:实现项目部署测试【重点
】-xml范式整合
1,导入依赖在上边的依赖的基础上
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid连接-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
2 编写两个pojo
// 准备实体类
@Data
public class Air implements Serializable {
private Integer id;
private Integer districtId;
private java.util.Date monitorTime;
private Integer pm10;
private Integer pm25;
private String monitoringStation;
private java.util.Date lastModifyTime;
}
// ================================================
@Data
public class District implements Serializable {
private Integer id;
private String name;
}
3,准备mybatis
3.1创建mapper接口
// 1. 接口
public interface AirMapper {
List<Air> findAll();
}
3.2在自带的配置文件加接口扫描
@SpringBootApplication//这个就是一个配置类属于@configuration下的
@MapperScan("com.hfqf.springboot.mapper")//扫描mapper接口所在的包(结合ssm:和接口扫描的功能一样)
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
3.3准备mapper的xml映射文件
注意这里还没有设置别名和扫描映射文件以及pojo里面是驼峰命名而数据库是 _ (下滑线)所以后边一定不要忘记在yml里面配置
// 3. 准备映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qf.firstspringboot.mapper.AirMapper">
<!-- List<Air> findAll();-->
<select id="findAll" resultType="Air">
select * from air
</select>
</mapper>
3.4配置yml
//4. yml文件(配置ssm中mybatis的所有内容-扫描,别名,驼峰,数据库)
<!-- 添加yml文件配置信息 -->
# mybatis配置
mybatis:
# 扫描映射文件
mapper-locations: classpath:mapper/*.xml
# 配置别名扫描的包
type-aliases-package: com.qf.firstspringboot.entity
configuration:
# 开启驼峰映射配置
map-underscore-to-camel-case: true
# 连接数据库的信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///2002-1?serverTimezone=UTC
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
3.5测试(接口位置直接go to-test,勾选方法名就可以创建)
注意;springboot自动提供了springbootapplication和springbootapplicationtest这两个类前者用来实现项目部署,后者实现的就是测试,只要把这个测试类加public让自己写的测试类继承他(原本的测试类继承的就是@SpringBootTest,所以可以在自己写的测试直接加@SpringBootTest注解)就能实现测试(不再用ssm中@runwith了)
class AirMapperTest extends FirstSpringbootApplicationTests {
@Autowired
private AirMapper airMapper;
@Test
void findAll() {
List<Air> list = airMapper.findAll();
for (Air air : list) {
System.out.println(air);
}
}
}
6,SpringBoot整合Mybatis:实现项目部署测试【重点
】-注解范式整合
注解方式在编写配置简单,简单SQL推荐使用
6.2.1 创建District的Mapper接口
public interface DistrictMapper {
List<District> findAll();
}
6.2.2 添加Mybatis注解
针对增删改查:@Insert,@Delete,@Update,@Select
还是需要在启动类中添加@MapperScan注解
@Select("select * from district")
List<District> findAll();
@Select("select * from district where id = #{id}")
District findOneById(@Param("id") Integer id);
6.2.3 在yml中添加日志配置就可以看到打印信息
// yml文件
logging:
level:
com.qf.firstspringboot.mapper: DEBUG
6.2.4 测试,查看日志
测试和之前xml方式一样
class DistrictMapperTest extends FirstSpringbootApplicationTests {
@Autowired
private DistrictMapper mapper;
@Test
void findAll() {
List<District> list = mapper.findAll();
for (District district : list) {
System.out.println(district);
}
}
@Test
void findOneById() {
District district = mapper.findOneById(5);
System.out.println(district);
}
}
7, SpringBoot整合分页助手
1 导入依赖
<!-- pageHelper依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
2 测试使用
@Test
public void findByPage(){
//1. 执行分页
PageHelper.startPage(1,5);
//2. 执行查询
List<Air> list = airMapper.findAll();
//3. 封装PageInfo对象
PageInfo<Air> pageInfo = new PageInfo<>(list);
//4. 输出
for (Air air : pageInfo.getList()) {
System.out.println(air);
}
}
8, SpringBoot整合JSP
springboot是默认不支持jsp的所有要重新配置依赖和在main目录下创建webapp
1 需要导入依赖
<!-- JSP核心引擎依赖-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- JSTL-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
2,创建JSP页面(创建html是没有头信息改为jsp是带头文件的,去搜一个jsp头文件)
,3 创建Contorller
// Controller
@Controller
public class JspController {
@GetMapping("/index")
public String index(Model model){
model.addAttribute("name","张三");
return "index";
}
}
4 配置前缀和后缀
spring:
mvc:
# 视图的前缀和后缀
view:
prefix: /WEB-INF/
suffix: .jsp