①创建Maven项目
②导入SpringBoot起步依赖
③定义Controller
④编写引导类
⑤启动测试
pom.xml
org.springframework.boot
spring-boot-starter-parent
2.4.5
org.springframework.boot
spring-boot-starter-web
HelloController.java
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello Spring-Boot";
}
}
HelloApplication.java
/*
* 引导类:SpringBoot项目的入口
* */
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args){
SpringApplication.run(HelloApplication.class,args);
}
}
小结:
SpringBoot在创建项目时,使用jar的打包方式
SpringBoot的引导类,是项目入口,运行main方法就可以启动项目
使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样
使用idea快速构建SpringBoot工程,定义HelloController.hello()方法,返回“Hello SpringBoot!”;
定义了各种技术的版本信息,组合了一套最优搭配的技术版本
在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程
我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置
对于properties:
server.port=8080
对于yml:
server:port: 8080
小结:
在同一级目录下优先级为:properties>yml>yaml
默认配置文件名称:application
YAML 是一种直观的能够被电脑识别的数据序列化格式
YAML文件扩展名可以使用.yml 或者 .yaml
大小写敏感
数据之前便必须有空格,作为分隔符
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数据可能不同,导致层次混乱)
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释,从这个字符一直到行尾,都会被解析器忽略
①对象(map):键值对的集合
person:
name: zhangsan
#行内写法
person: {name: zhangsan}
②数组:一组按次序排列的值
address:
- beijing
- shanghai
#行内写法
address: [beijing,shanghai]
③纯量:单个的、不可再分的值
msg1: 'hello \n world' #单引忽略转义字符
msg2: "hello \n world" #双引识别转义字符
④参数引用
name: lisi
person:
name: ${name} #引用上边定义的name值
name: abc
#对象的格式
person:
name: ${name}
age: 20
#对象行内写法
person2: {name: lisi,age: 20}
#数组
address:
- beijing
- shanghai
#纯量
msg1: 'hello \n world'
msg2: "hello \n world"
1)@Value
2)Enviroment
3)@ConfigurationProperties
每个属性单个获取
@Value("${name}")
private String name;
@Value("${person.name}")
private String name2;
@Value("${person.age}")
private int age;
@Value("${address[0]}")
private String address1;
@Value("${address[1]}")
private String address2;
@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;
@RequestMapping("/hello2")
public String hello2(){
System.out.println(name);
System.out.println(name2);
System.out.println(age);
System.out.println(address1);
System.out.println(address2);
System.out.println(msg1);
System.out.println(msg2);
return name;
}
注入环境Environment对象,通过该对象对getProperty方法获取属性值
@Autowired
private Environment env;
@RequestMapping("/hello3")
public String hello3(){
System.out.println(env.getProperty("person.name"));
System.out.println(env.getProperty("address[0]"));
return name;
}
对象和配置属性的绑定
Person.java
@Component
@ConfigurationProperties(prefix="person")
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
HelloController.java
@Autowired
private Person person;
@RequestMapping("/hello3")
public String hello3(){
System.out.println("~~~~~~~~~~~~~");
System.out.println(person);
System.out.println("~~~~~~~~~~~~~");
return name;
}
把数组加入到Person对象:
修改yml文件
person:
name: ${name}
age: 20
address:
- beijing
- shanghai
对于这个爆红:
添加依赖到pom.xml即可:
org.springframework.boot
spring-boot-configuration-processor
true
我们在开发SpringBoot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常复杂。profile功能就是来进行动态配置切换的。
properties文件
dev是后缀
动态激活代码:
spring.profiles.active=dev
yml多文件配置
---
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8083
spring:
profiles:
active: test
---
server:
port: 8084
spring:
profiles:
active: pro
---
spring:
config:
activate:
on-profile:
- pro
Springboot程序启动时,会从以下位置加载配置文件:
1. file:../config/:当前项目下的/config目录下
2.file:../ :当前项目的根目录
3.classpath:/config/:classpath的/config目录
4.classpath:/ :classpath的根目录
加载顺序为上文的排列顺序,高优先级配置的属性会生效
file是整个工程的文件:
classpath 是模块下的类路径
①搭建SpringBoot工程
②引入starter-test起步依赖
③编写测试类
④添加测试相关注解
@RunWith(SpringRunner.class) //新版无需再写
@SpringBootTest(classes = 启动类.class)
注:如果不想写启动类,就将测试类放在启动类的目录或子目录下
⑤编写测试方法
UserService.java
@Service
public class UserService {
public void add(){
System.out.println("add~~~");
}
}
UserServiceTest.java
@SpringBootTest
public class UserServiceTest {
@Autowired
UserService userService;
@Test
public void testAdd(){
userService.add();
}
}
①搭建SpringBoot工程
②引入redis起步依赖
③配置redis相关属性
④注入 RedisTemplate模板
⑤编写测试方法,测试
勾选NoSQL的第一个选项卡
会自动导入依赖:
org.springframework.boot
spring-boot-starter-data-redis
只有本机的Redis才不需要配置,直接使用模板
@SpringBootTest
class Demo1ApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testSet(){
redisTemplate.boundValueOps("name").set('zhangsan');
}
@Autowired
public void testGet(){
Object name = redisTemplate.boundValueOps("name").get();
System.out.println(name);
}
}
①搭建SpringBoot工程
②引入mybatis起步依赖,添加mysql驱动
③编写DataSource和MyBatis相关配置
④定义表和实体类
⑤编写dao和mapper文件/纯注解开发
⑥测试
勾选SQL的两个选项卡
此时,会自动添加依赖:
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.2
com.mysql
mysql-connector-j
runtime
建库建表
create database db_springboot;
use db_springboot;
create table tb_user(
id int(11) not null auto_increment,
username varchar(32),
password varchar(32),
primary key(id)
);
创建实体类:
public class User {
private int id;
private String username;
private String password;
……
}
配置application.yml
spring:
datasource:
url: jdbc:mysql:///db_springboot
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
UserMapper.java
@Mapper
@Repository
public interface UserMapper {
@Select("select * from tb_user")
public List findAll();
}
测试类:
@Autowired
private UserMapper userMapper;
@Test
public void testFindAll(){
List list = userMapper.findAll();
System.out.println(list);
}
UserXmlMapper.java
@Mapper
public interface UserXmlMapper {
public List findAll();
}
UserXmlMapper.xml
application.yml
spring:
datasource:
url: jdbc:mysql:///db_springboot?serverTimmezone=UTC
username: root
password: 0529Love
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
type-aliases-package: com.example.demomybatis.domain
mapper-locations: classpath:mapper/*Mapper.xml
测试类
@Autowired
private UserXmlMapper userXmlMapper;
@Test
public void testFindAll2(){
List list = userXmlMapper.findAll();
System.out.println(list);
}