Spring Boot 微框架Part1
1.springboot的引言
SpringBoot是由 Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,springboot致力于在蓬勃发展的快速应用开发领域(rapid application devolopment)成为领导者。
springboot(微框架) = spring(项目管理) + springmvc(控制器)
2.SpringBoot的特点
- 构建一个独立的spring应用;
- springboot开发的应用内嵌tomcat容器,无需部署war文件;
- 简化maven的配置;
- 自动配置spring应用和springmvc应用,没有xml配置文件。
3.SpringBoot的环境搭建
环境要求:
- MAVEN 3.x+
- Spring FrameWork 4.x+
- JDK7.x +
. Spring Boot 1.5.x+
3.1 项目中引入依赖
<!-- 继承springboot的父项目 -->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>1.5.7.RELEASE</version>
</parent>
<!-- 引入web的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.2 引入springboot配置文件
项目中src/main/resources/application.yml
3.3 编写入口类
package com.baizhi;
//入口类必须放在项目的基包下,SpringBoot只有一个入口类,所以这个注解只能出现一次
@SpringBootApplication
public class Application {
//main函数
public static void main(String[] args) {
//启动 springboot应用
//参数1:入口类类对象 参数2:main函数参数
SpringApplication.run(Application.class,args);
}
}
3.4 建包并创建控制器
package com.baizhi.controller;
/**
* 访问控制器路径:http://localhost:8080/hello/hello
* 注意:springboot的应用 默认 没有项目名
*/
@Controller
@RequestMapping("hello")
public class HelloController {
@RequestMapping("hello")
@ResponseBody
public String hello(){
System.out.println("=========hello==========");
return "hello";
}
}
注意:使用springboot应用开发的项目默认没有应用名,如果需要使用应用名,必须在配置文件中加入如下配置指定应用名:
server:
port: 8989 #修改内嵌服务器的端口
context-path: /ems #设置项目名为ems
4.SpringBoot中相关注解说明
# @SpringBootApplication
注解作用:用来标识这是一个SpringBoot入口类,这个注解只能出现一次。
详解:
@SpringBootApplication 是一个 派生注解|组合注解,等价于
@SpringBootConfiguration:标识注解,标识这是一个springboot入口类
@EnableAutoConfiguration:核心注解,自动配置spring 以及项目中引入第三方技术的自动配置
@ComponentScan :组件扫描注解,默认扫描的是入口类所在的包及其子包
# main函数的作用
1.通过main函数这种方式启动内部内嵌的tomcat服务器
2.SpringApplication.run(Application.class,args);
参数1:入口类的类对象 目的:让@EnableAutoConfiguration注解 自动配置spring时,将 @ComponentScan扫描到注解,创建对象一并放入工厂。
参数2:main方法的参数,这个参数通过指定外部虚拟机参数的形式覆盖内部默认参数。
# @RestController = @Controller + @ResponseBody
修饰范围:用在类上,用在所有的控制器上
作用: 将控制器中所有的方法的返回值转换为json并相应到前端
5.SpringBoot的配置文件拆分
# 配置文件拆分规则:
- 将公共配置放入主配置文件中,将不同的配置放入不同环境配置文件中:
# 举例:如,
springboot ems 应用名
端口号:
测试环境下:8989
生产环境下:9090
# 主配置文件
application.yml
server:
context-path: /ems
# 测试环境下配置文件:
application-dev.yml
server:
port: 8989
# 生产环境下配置文件:
application-prod.yml
server:
port: 9090
# 激活某个配置文件,在主配置文件中写明:
spring:
profiles:
active: prod|dev
6.SpringBoot banner的使用
-
自定义beanner:
在 src/main/resources 目录下 自定义banner.txt文件 书写banner的内容即可。
7.SpringBoot创建自定义对象
7.1 创建单个对象
# 注解方式:@Component 通用组件对象的创建注解
@Service 标识业务层组件创建
@Controller 控制器对象创建
@Repository 用来创建DAO组件注解
7.2 管理多个对象
在springboot中如果要管理
复杂对象
必须使用@Configuration + @Bean
注解进行管理
# @Configuration 配置注解 修饰范围:用在类上
作用:相当于曾经的applicationContext.xml配置文件
@Configuration
public class BeanConfig {
/**
* 创建日期对象
* @return
*/
@Bean
public Calendar getCalendar(){
return Calendar.getInstance();
}
/**
* 创建数据库连接对象
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
@Bean
public Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm", "root", "root");
return connection;
}
}
# 注意:
1.@Configuration 配置注解主要用来生产多个组件交给工厂管理 (注册形式)
2.@Component 用来管理单个组件 (包扫描形式)
8.springboot中注入
springboot中提供了三种注入方式:
注入基本属性
,对象注入
8.1 基本属性注入
# 使用@Value注解进行属性注入
注入基本类型:string + 日期类型 + 八种基本类型 使用@Value注入
name: xiaohei #字符串类型
age: 23 #整数类型
sex: true #布尔类型
date: 2020/1/1 #日期类型
price: 23.23 #浮点数类型
qqs: xiaofei,xiaofei,xiaowang #数组
strs: abd,dasd,dasd #List集合
maps: "{key1: 'value1', key2: 'value2'}" #Map集合
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
@Value("${sex}")
private boolean sex;
@Value("${date}")
private Date date;
@Value("${price}")
private float price;
@Value("${qqs}")
private String[] qqs;
@Value("#{'${strs}'.split(',')}")
private List<String> strs;
@Value("#{${maps}}")
private Map<String,String> maps;
8.2 对象属性注入
# @ConfigurationProperties(prefix="前缀")
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String name;
private Integer age;
private Date date;
private List<Integer> nums;
<!-- 引入依赖构建自定义注入元数据 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
# yml文件中编写对象信息
user:
name: 小王
age: 13
date: 2020/1/1
nums:
- 1111
- 2222
9.Spring集成jsp模板展示
9.1 引入jsp的集成jar包
<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>
9.2 配置视图解析器
#在配置文件中引入视图解析器
spring:
mvc:
view:
prefix: / # /代表访问项目中webapp中页面
suffix: .jsp
9.3 IDEA中无法直接访问jsp的解决方案
- 使用插件方式启动springboot项目:
<build>
<!--引入jsp运行插件-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
使用插件启动:springboot:run
- 修改当前springboot项目的运行目录
在Edit Configurations中设置SpringBoot的启动器Application的Working Directory为$ModuleFileDir$
10.SpringBoot整合mybatis框架
10.1 引入依赖
<!--SpringBoot启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis整合SpringBoot的启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- druid连接池的依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.24</version>
</dependency>
<!-- SpringBoot整合JSP相关依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- SpringBoot测试相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
10.2 配置配置文件
server:
port: 8080 #设置端口号为8080
servlet:
context-path: /ems #设置项目名为ems
spring:
mvc:
view: #配置视图解析器
prefix: / # 设置前缀为/
suffix: .jsp # 设置后缀为.jsp
datasource: #设置数据库连接池
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
url: jdbc:mysql:///file?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT&allowPublicKeyRetrieval=true
username: root
password: root
10.3 增加mybatis整合相关配置
# 指定映射文件的位置,实体类的别名
mybatis:
mapper-locations: classpath:mapper/*Dao.xml
type-aliases-package: com.baizhi.entity
@SpringBootApplication
@MapperScan("com.baizhi.dao")//指定dao接口所在的包
public class Application {
10.4 编写测试类
DAO、Service代码都编写好之后,要先对Service实现类对象的代码进行测试:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)//SpringBoot的测试配置类加载器
public class BaseTest {
@Autowired
private UserService userService;
@Test
public void test(){
List<User> all = userService.findAll();
all.forEach(user -> System.out.println("user = " + user));
}
}
10.5 开启jsp页面的热部署
server:
port: 8989
jsp-servlet:
init-parameters:
development: true #开启jsp页面的调试模式