1. 简介
- Spring两大缺点
- 配置过于繁琐
- 项目构建时坐标导入麻烦
- SpringBoot两大核心功能
- 起步依赖:将具备某种功能的坐标打包到一起,并提供一些默认的应用
- 自动配置:这是一个应用程序启动时的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个,是Spring自动完成的
2. 快速入门
2.1 代码实现
- 创建maven工程
- 在pom文件中继承SpringBoot的起步依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
- 引入web的启动依赖,因为要继承SpringMVC进行Controller的开发,坐标指向的jar包包括了Spring和SpringMVC
<dependencies>
<!--web功能的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- 编写SpringBoot引导类
//声明该类是一个SpringBoot引导类
@SpringBootApplication
public class MySpringBootApplication {
//main是java程序的入口
public static void main(String[] args) {
//run方法,表示运行SpringBoot的引导类,run参数就是SpringBoot引导类的字节码对象
SpringApplication.run(MySpringBootApplication.class);
}
}
- 编写Controller
@Controller
public class QuickController {
@RequestMapping("quick")
@ResponseBody
public String quick(){
return "hello springboot";
}
}
- 测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FN9Q1eyE-1605953035029)(https://i.loli.net/2020/11/21/SRJVhAHatcEzxD2.png)]
2.2 小知识点
- 热部署
- 在pom文件添加
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
- 更改idea的配置
- 自己查
- 使用idea快速创建SpringBoot项目
- 创建时不选择Maven,而选择Spring Initializr
- 勾选需要使用的组件
- 完成好了自己手动实现代码的功能
3. 原理分析
- parent:做了一些响应的版本控制
- web:包括MVC里面的东西
- @SpringBootApplication:分析后发现可以在resources文件里面加入配置文件,修改默认的配置如端口号和项目部署名什么的
4. 配置文件
- 配置文件类型和作用
- 类型:分为properties和yml
- 作用:覆盖SpringBoot的默认配置
- 加载顺序:yml>yaml>properties,优先级相反
- application.yml配置文件
- 简介:是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本交互的,可以被支持YAML库的不同的编程语言程序导入。YAML文件是以数据为核心的,比传统的xml方式更加简介。
- yml语法
- 普通数据的配置,:后面要用空格隔开
name: zhangsan
- 对象的配置
#对象的配置
person:
name: zhangsan
age: 18
addr: beijing
server:
port: 8081
- 行内对象的配置
person: {name: zhagnsan,age: 18,addr: beijing}
- 配置数据、集合(普通字符)
city:
- beijing
- shanghai
- guangzhou
- shenzhen
city: [beijing,shanghai,guangzhou,shenzhen]
- 配置数据、集合(对象数据)
student:
- name: tom
age: 18
addr: beijing
- name: luky
age: 19
addr: shanghai
student: [{name: tom,age: 18,addr: luky},{name: luky,age: 19,addr: shanghai}]
- map配置跟对象配置方式一样
map:
key1: value1
key2: value2
- 注解
- @Value,获取yml配置文件里面的值
@Controller
public class Quick2Controller {
@Value("${name}")
private String name;
@Value("${person.addr}")
private String addr;
@RequestMapping("quick2")
@ResponseBody
public String quick2(){
return name+":"+addr;
}
}
- @ConfigurationProperties,可以根据前缀(对象)名称,并且按照属性名称找到对象对应的值注入,需要有getter,setter方法
@Controller
@ConfigurationProperties(prefix = "person")
public class Quick3Controller {
private String name;
private String addr;
@RequestMapping("quick3")
@ResponseBody
public String quick3(){
return name+":"+addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
- 类上会显示一行提示
点进去将推荐的pom坐标导入,即configuration-processor,后面如果先写好了2.的代码,在yml文件中再写会有提示
5. 集成
5.1 集成Mybatis
- 用脚手架创建一个boot项目,创建一个user表
- 添加mybatis起步依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
//mybatis为名字的头部说明不是boot提供的
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
- 添加数据库驱动坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 添加数据库连接信息
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
- 创建实体bean
ublic class User {
// 主键
private Long id;
// 用户名
private String username;
// 密码
private String password;
// 姓名
private String name;
}//省略getter,setter方法
- 编写Mapper
@Mapper
public interface UserMapper {
public List<User> queryUserList();
}
- 注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
- 配置Mapper映射文件
<?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.itheima.mapper.UserMapper">
<select id="queryUserList" resultType="user">
select * from user
</select>
</mapper>
- 在application.properties中添加mybatis的信息
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.itheima.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
- 编写测试Controller
@Controller
public class MybatisController {
@Autowired
//userMapper会报错,因为是启动时才加载
private UserMapper userMapper;
@RequestMapping("/queryUser")
@ResponseBody
public List<User> queryUser(){
List<User> users = userMapper.queryUserList();
return users;
}
}
- 测试
5.2 继承Junit
- 导入坐标(默认已经导入了)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 测试类代码
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootMybatisApplication.class)
public class MybatisTest {
@Autowired
private UserMapper userMapper;
@Test
public void test(){
List<User> users = userMapper.queryUserList();
System.out.println(users);
}
}
- 控制台打印