SpringBoot2
一、初始化项目
-
①、创建project
-
②、构建maven项目
-
如果选项里没有8的,可以最顶上镜像换成阿里巴巴的:https://start.aliyun.com/
-
直接在main函数运行就行
二、SpringBoot入门
1、复制工程
-
原则
- 保留工程基础结构
- 抹掉原始工程痕迹
-
做个工程模板
- 1、保留一个原始带controller的工程
- 2、复制下来,把名字改成springboot2_0x_xxxxxxxxxxxx
- 3、修改文件,修改pom.xml文件
<artifactId>springboot2_test02</artifactId> <!--把这个名字改成springboot2_0x_xxxxxxxxxxxx-->
- 删除pom.xml文件里面的name标签
- 把文件删除只剩src和pom.xml文件
- 保留下来使用
2、基础配置
2.1、属性配置
-
修改配置
-
properties
-
# 服务器的端口配置 server.port=8080
-
-
yml格式**(主流)**
-
server: port: 8080
-
-
yaml
-
server: port: 8080
-
-
当三个配置文件都存在时,properties > yml > yaml ,三者是共存叠加,并相互覆盖
2.2、yaml格式文件
2.2.1、优点
-
容易阅读
-
容易与脚本语言交互
-
以数据为核心,重数据轻格式
-
主流后缀为 .yml
2.2.2、yaml语法规则
-
大小写敏感
-
属性层级关系使用多行描述,每行结尾使用冒号结束
-
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
-
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
-
#号 表示注释
-
country: china province: beijing city: beijing area: haidian user: username: zzj age: 18 likes: #数组 - game - music - sleep users: #对象数组格式一 - name: Tom age: 4 - name: Jerry age: 5 users: #对象数组格式二 - name: Tom age: 4 - name: Jerry age: 5 users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ] #对象数组缩略格式
2.2.3、读取yaml数据
-
//Rest模式 @RestController @RequestMapping("/books") public class BookController { //读取yaml的单一数据 @Value("${country}") private String country1; //读取对象数据 @Value("${user.username}") private String name1; //读取数组里的数据 @Value("${likes[1]}") //索引是从0开始的 private String likes1; //读取数组对象里的数据 @Value("${users[1].age}") //索引是从0开始的 private String users1; @GetMapping public String getById(){ System.out.println(country1); System.out.println(name1); System.out.println(likes1); System.out.println(users1); return "hello springboot"; }
-
yaml文件中变量相互引用
-
baseDir: C:\window10 temDir: C:\window\temp temDir1: ${baseDir}\temp #下面这个引用了baseDir,当baseDir改变时,temDir1也会发生改变
-
2.2.4、读取全部数据
-
@Autowired //使用自动装配将所有数据封装到一个对象 Environment 中 private Environment env; //这里面存着所有数据 //通过Environment对象获取数据 System.out.println(env.getProperty("temDir1")); System.out.println(env.getProperty("user.username")); System.out.println(env.getProperty("likes[1]"));
2.2.5、指定数据封装读取
-
#当我们想要在yaml里面单独读取这个时 user: username: zzj password: zzj0806 age: 18 sex: 男
-
声明一个类,属性名和yaml里面的一样,用于封装yam文件里对应的数据
-
定义为Spring管控的bean
-
指定加载的数据
-
@Component @ConfigurationProperties(prefix = "user") public class MyUser {
-
3、整合第三方
3.1、Junit
-
@SpringBootTest(classes = JunitApplication.class) class Springboot2Test03JunitApplicationTests { //注入你要测试的对象 @Autowired private BookDao bookDao; @Test void contextLoads() { //执行要测试的对象对应的方法 bookDao.save(); } }
-
注意:测试类所在的位置的路径 要 和main方法所在的引导类的路径一致,不一致时要进行额外操作
-
当二者路径不一样时,会导致测试类找不到引导类了,就找不到IOC容器,可以用@SpringBootTest来指定路径
-
总结
- 导入测试对应的starter
- 测试类使用@SpringBootTest修饰
- 使用自动装配的形式添加要测试的对象
- 测试类如果存在于引导类所在包或子包中无需指定引导类
- 测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类
3.2、mybatis
3.2.1、创建工程
-
创建到这个位置时,和Junit不一样了
-
将application.propertis文件改成yml文件后缀,并配置数据库信息
-
#配置相关信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm username: root password: zzj0806
-
-
创建数据库表tbl_book
-
创建bookDao接口和实体类对象
-
public class Book { private Integer id; private String type; private String name; private String description; public Integer getId() { return id; }
-
@Mapper public interface BookDao { @Select("select * from tbl_book where id = #{id}") public Book getById(Integer i); }
-
-
写测试方法
-
@SpringBootTest class Springboot2Test04MybatisApplicationTests { @Autowired private BookDao bookDao; @Test void contextLoads() { System.out.println(bookDao.getById(6)); } }
-
-
总结
-
整合操作需要勾选MyBatis技术,也就是导入MyBatis对应的starter
-
数据库连接相关信息转换成配置
-
数据库SQL映射需要添加@Mapper被容器识别到
-
MySQL 8.X驱动强制要求设置时区
- 修改url,添加serverTimezone设定
- 修改MySQL数据库配置
-
驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver
-
3.3、mybatis-plus
-
<!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.4</version> </dependency>
-
yml的配置一样
-
#配置相关信息 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm username: root password: zzj0806
-
-
bookDao不一样
-
//不用写sql语句和方法了,MP里面有方法 @Mapper public interface BookDao extends BaseMapper<Book> { }
-
-
测试的方法,不是自己的写的,是MP里面内置的
-
@SpringBootTest class Springboot2Test05MybatisPlusApplicationTests { @Autowired private BookDao bookDao; @Test void contextLoads() { System.out.println(bookDao.selectById(2)); } }
-
3.4、druid
-
<!-- pom.xml导入druid的坐标 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.20</version> </dependency>
-
#配置druid数据源,就修改配置信息即可 spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm username: root password: zzj0806
4、整合案例
4.1、项目架构
4.2、yml配置信息
4.3、dao层
- 使用lombok快速初始化实体类对象
- 创建bookDao接口,使用了mybatis-plus快速开发—继承baseMapper
4.4、service层
-
创建bookService接口,并使用mybatis-plus快速开发—继承 IService
-
创建实现类 bookServiceImp,并使用mybatis-plus快速开发----继承 ServiceImpl,并实习bookService接口
4.5、controller层
- 创建类 R 来实现传输两层数据,一层状态flag,一层数据data
- 创建controller类,并使用rust风格,并采用两层数据返回前端
- 因为使用了分页功能,要创建一个mybatis-plus的分页拦截器
4.6、前端
题注不太会,稍稍自动生成一下