1.1 SpringBoot项目创建
- 从官网创建
- idea中联网从官网创建
- idea中联网从阿里云创建
- SpringBoot项目手动创建
前三种创建方式都需要联网创建,需要等待的时间很长,我一般习惯手动创建。通过创建一个普通的Maven项目自己手动配置得到一个SpringBoot项目。
1.2 手动创建SpringBoot项目
1.2.1 Maven项目的创建
新建项目
选择Maven,下一步
只需要修改命名就行
项目创建成功
1.2.2 手动配置将Maven项目变为SpringBoot项目
pom.xml中添加依赖项
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
编写启动类
package com.ylh;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootDemo4Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemo4Application.class);
}
}
至此,Maven项目成功变成SpringBoot项目
1.3 概述
SpringBoot是由Pivotal团队提供的全新的框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
Spring程序的缺点
依赖设置繁琐、配置繁琐
SpringBoot程序的优点
-
起步依赖【简化配置】
-
自动配置【简化常用工程相关配置】
-
辅助功能【内置服务器……】
项目创建总结:
1、开发springboot程序要继承spring-boot-starter-parent
2、spring-boot-starter-parent中定义了很多个依赖管理
3、继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突
4、继承parent的形式也可以采用引入依赖的形式实现效果
starter
SpringBoot项目中常见的项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
parent
所有SpringBoot项目要继承的项目,定义了若干个坐标的版本号【依赖管理,而非真正的依赖】,以达到减少依赖冲突的目的
spring-boot-starter-parent个版本之间存在着诸多坐标的不同
springboot提供了3中配置文件的格式
- properties【传统的格式/默认的格式】
- yml【主流格式】
- yaml
springboot配置文件的加载顺序
application.properties>application.yml>application.yaml
不同配置文件中相同的配置按照加载的优先级相互覆盖,不同配置文件中不同的配置全部保留
1.4 yaml文件
概述
YAML[Yaml ain't Markup Language]一种数据序列化格式
优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
扩展名
- .yml【主流】
- .yaml
语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许空格【不允许使用tab】
- 属性值前添加空格【属性名与属性名之间使用冒号+空格作为分隔】
字面值表示方式
boolean: True # True true False FALSE false均可
float: 12.23
int: 123
null: ~ # 使用~表示null
string: Helloword
string1: "Helloworld" # 字符串可以直接书写,也可以使用双引号引起来
date: "2023-05-27"
datetime: 2023-05-27T11:46:23+08:00 # 时间和日期使用T连接,最后使用+代表时区
# 数组表示方式:在属性名书写位置的下方使用减号作为数据开始的符号,每行书写一个数据,减号与数据间空格分隔
students:
- 小明
- 小红
student:
name: 袁~
age: 18
subject:
- java
- web
- javaEE
hobbys: [ 唱歌,跳舞 ] # 数组书写的缩略格式
读取单一数据
province: 陕西
city: 西安
student:
name: 袁李慧
age: 21
school:
- 西交
- 西电
package com.ylh.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/users")
public class UserController {
@Value("${province}")
private String province;
@Value("${city}")
private String city;
@Value("${student.name}")
private String name;
@Value("${student.age}")
private int age;
@Value("${school[1]}")
private String school;
@GetMapping
public String hello(){
System.out.println(province);
System.out.println(city);
System.out.println(name);
System.out.println(age);
System.out.println(school);
return "hello springboot is running"+province+"=="+city;
}
}
使用@Value读取单个数据,属性名引用方式:¥{以及属性名.二级属性名……}
//使用自动装配将所有的数据封装到一个Environment对象中
@Autowired
private Environment env;
@GetMapping("/getData")
public String getYamlData(){
System.out.println(env);
System.out.println(env.getProperty("province"));
System.out.println(env.getProperty("city"));
System.out.println(env.getProperty("school[2]"));
System.out.println(env.getProperty("student.name"));
return "get yaml data is success";
}
使用Environment对象封装全部配置信息
使用@Autowired自动装配数据到Environment对象中
读取引用类型数据
定义yml文件
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql:///test
username: root
password: 123mysql
定义实体类
package com.ylh.util;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "MyDataSource{" +
"driver='" + driver + '\'' +
", url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
@Controller
@Autowired
private MyDataSource dataSource;
@GetMapping("/ds")
public String getDataSource() {
System.out.println(dataSource);
return dataSource.toString();
}
使用@ConfigurationProperties注解绑定配置信息到封装类中
封装类需要定义为spring管理的bean,否则无法进行属性注入
1.5 整合第三方技术
1.5.1 整合Junit
引入依赖——导入对应的starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
在测试类上使用@SpringBootTest注解修饰
package com.ylh;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class SpringBootDemo4Test {
public void testUser(){
}
}
使用自动装配的形式添加要测试的对象
1.5.2 整合mybatis
引入依赖——导入对应的starter
<!--导入对应的starter MaBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--导入数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
设置数据源的参数
#配置数据源信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///springboot_db
username: root
password: 123mysql
测试类
package com.ylh;
import com.ylh.dao.StuDao;
import com.ylh.pojo.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class SpringBootDemo2Test {
@Autowired
private StuDao stuDao;
@Test
public void testStuById(){
Student stuById = stuDao.findStuById(1);
System.out.println(stuById);
}
}
Tips:
MyBatis8.x驱动要求设置时区
a.url后边添加serverTime设定Asia/ShangHai或者使用UTC
如果是映射配置文件
<?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.ylh.dao.StuMapper">
<!--查询-->
<select id="findAll" resultType="Stu">
select * from stu
</select>
</mapper>
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径
type-aliases-package: com.ylh.pojo # 配置是哪个包下的类的默认的别名
1.5.3 整合Mybatis_Plus
1.导入坐标
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version> <!--这里必须写版本, 因为mybatis_plus未收录在boot中-->
</dependency>
2.创建Dao接口
继承BaseMapper,泛型就是封装数据的实体类,该接口中常用的CRUD方法已经写好了,直接用
@Mapper
public interface StuDao extends