40-SpringBoot-qianfeng-笔记
①:引言
为了使用SSM框架去开发,准备SSM框架的模板配置。 为了Spring整合第三方框架,单独的去编写xml文件。 导致SSM项目后期xml文件特别多,维护xml文件的成本是很高的。 SSM工程部署也是很麻烦,依赖第三方的容器。 SSM开发方式是很笨重。
②:SpringBoot介绍
SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC,data-ipa等常用的框架封装到了一起,帮助你隐藏这些框架的整合细节,实现敏捷开发。 SpringBoot就是一个工具集
特点
SpringBoot项目不需要模板化的配置 在SpringBoot中整合第三方框架时,只需要导入相应的starter依赖包,就自动整合了 SpringBoot默认只有一个 .properties的配置文件,不推荐使用xml,采用 .java 的文件去编写配置信息 SpringBoot工程在部署时,采用的是jar包的方式,内部自动依赖Tomcat容器,提供了多环境的配置。 后期要学习的微服务框架Springcloud需要建立在SpringBootl的基础上。
二、SpringBoot快速入门
①:快速构建SpringBoot
1. 选择构建项目的类型
2. 指定SpringBoot依赖和版本
3.第一次创建SpringBoot工程,下载大量依赖,保证,maveni已经配置了阿里云的私服。
4.
5. 将工程修改为web工程
6. 创建controller包在包下创建一个测试类
@RestController
public class TestController {
@GetMapping ( "/test" )
public String test ( ) {
return "Hello SpringBoot" ;
}
}
7.启动SpringBoot
②:SpringBoot的目录结构
③:SpringBoot三种启动方法
1. 运行启动类的main方法即可运行SpringBoot工程
2. 采用maven的命令去运行SpringBoot工程 指令:mvn spring-boot:run
④:SpringBoot官网创建方式 (补)
2. 一直下滑 找到Spring initializr
3. 填写相关信息
⑤:使用jetty 服务启动程序 (补)
1. 排除tomcat服务器
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-web artifactId>
< exclusions>
< exclusion>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-tomcat artifactId>
exclusion>
exclusions>
dependency>
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-jetty artifactId>
dependency>
①:@Configuration和@Bean
之前使用SSM去开发时,在xml文件中编写bean标签。 但是SpringBoot?不推荐使用xml文件。 @Configuration注解相当于beansi标签 @Bean注解相当于bean标签 id=“方法名|注解中的name属性(优先级更高)” class=“方法的返回结果”
1. 定义一个实体类
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class User {
private int userId;
private String username;
}
2. 创建User的配置类
@RestController
public class UserConfig {
@Bean ( "user1" )
public User getUser ( ) {
User user = new User ( 1 , "张三" ) ;
return user;
}
}
3. 咋TestController中添加一个新的方法
@RestController
public class TestController {
@Autowired
private User user;
@GetMapping ( "/test" )
public String test ( ) {
return "Hello SpringBoot" ;
}
@GetMapping ( "/user" )
public User user ( ) {
return user;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
测试结果
②:@SpringBootApplication
@SpringBootApplication就是一个组合注解
1: @SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。 2: @nableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesL.oader的类,加载META-lNF/spring.factoriesi配置类(已经开启的),通过SpringFactoriesLoader中的load方法,以for循环的方式,一个一个加载。
好处:无需编写大量的整合配置信息,只需要按照SpringBoot提供好了约定去整合即可。 坏处:如果说你导入了一个starter依赖,那么你就需要填写他必要的配置信息。 手动关闭自动装配指定容:@SpringBootApplication(exclude=QuartzAutoConfiguration.class 3: @ComponentScani就相当于
四、SpringBoot常用配置
①:SpringBoot的配置文件格式
SpringBoot的配置文件支持properties和yml,甚至他还支持json。 更推荐使用yml文件格式 :
1.yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置。 2.yml文件,相比properties.更轻量级一些
yml文件的劣势 :
1.严格遵循换行和缩进。 2.在填写value时,一定要在:后面跟上空格
②:多环境配置
01. 方式一(使用多个pml文件)
1. 模拟配置出生产环境和开发环境
2. 直接运行测试
3. 打包测试(再次将打好的jar包复制到桌面) 运行指令1 :java -jar .\springBoot_01_demo1-0.0.1-SNAPSHOT.jar 运行指令2 :java -jar .\springBoot_01_demo1-0.0.1-SNAPSHOT.jar --spring.profiles.active=环境名
02. 方式二(使用一个pml文件)(补)
03. 方式三:使用peoperties (补)
04. 命令启动参数设置 (补)
1. 修改IDEA打包编码以免中文乱码
2. 命令启动
05.兼容问题(Maven与Boot)
③:SpringBoot引入外部配置信息
1. 使用@Value获取值
2. 一次性获取多个值
3. 导入 spring-boot-configuration-processor 坐标
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-configuration-processor artifactId>
< version> 2.6.11 version>
dependency>
④:热加载
1. 问题分析
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-devtools artifactId>
dependency>
2.1 可以不指定版本
3. 设置自动构建项目
4.测试
⑤:配置文件自动提示功能消失
⑥:配置文件优先级 (补)
⑦:yaml格式 (补)
⑧:yaml格式读取数据(三种) (补)
1. 方式一: 直接获取数据
2. 方式二:直接获取全部信息 在 取数据
@RestController
public class TestController2 {
@Autowired
private Environment env;
@GetMapping ( "/test2" )
public String test ( ) {
System . out. println ( env. getProperty ( "server.port" ) ) ;
System . out. println ( env. getProperty ( "books.names[1]" ) ) ;
return "Hello SpringBoot" ;
}
}
3. 方式三:使用实体类进行封装数据
@Component
@ConfigurationProperties ( prefix = "books" )
@Data
@ToString
public class Books {
private double price;
private String [ ] names;
}
@RestController
public class TestController2 {
@Autowired
private Books book;
@GetMapping ( "/test2" )
public String test ( ) {
System . out. println ( "******************" ) ;
System . out. println ( book) ;
return "Hello SpringBoot" ;
}
}
⑨:配置文件分类
1. IDEA中
2. 使用jar包时
五、SpringBoot整合MyBatis(xml方式)
①:导入依赖
< dependency>
< groupId> mysql groupId>
< artifactId> mysql-connector-java artifactId>
dependency>
< dependency>
< groupId> com.alibaba groupId>
< artifactId> druid-spring-boot-starter artifactId>
< version> 1.2.6 version>
dependency>
< dependency>
< groupId> org.mybatis.spring.boot groupId>
< artifactId> mybatis-spring-boot-starter artifactId>
< version> 2.1.3 version>
dependency>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
②:编写配置文件
01. 准备实体类
1. 使用Idea自动创建
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Classes {
private long cId;
private String cName;
private String cDesc;
}
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Students {
private String sId;
private String sName;
private long sAge;
private long sCid;
}
02. 准备Mapper接口
1. 创建Mapper接口
public interface StudentMapper {
List < Students > findAll ( ) ;
}
2. 在启动类中添加,扫描Mapper接口所在的包
@MapperScan ( basePackages = "com.it.springboot_01_demo1.mapper" )
03. 准备映射文件
1. 创建Mapper文件编写数据库查询语句
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " com.it.springboot_01_demo1.mapper.StudentMapper" >
< select id = " findAll" resultType = " Students" >
select * from students;
select>
mapper>
2. 在yml配置文件中添加mybatis的配置
mybatis :
mapper-locations : classpath: mapper/*.xml
type-aliases-package : com.it.springboot_01_demo1.entity
configuration :
map-underscore-to-camel-case : true
3. 指定数据库的连接信息
spring :
datasource :
driver-class-name : com.mysql.cj.jdbc.Driver
url : jdbc: mysql: //localhost/db_mybatis_demo2? characterset=utf- 8&serverTimezone=UTC
username : root
password : root
type : com.alibaba.druid.pool.DruidDataSource
04. 测试
1. 创建测试类并继承启动测试类
class StudentMapperTest extends SpringBoot01Demo1ApplicationTests {
@Autowired
private StudentMapper studentMapper;
@Test
void findAll ( ) {
List < Students > studentsList = studentMapper. findAll ( ) ;
for ( Students student: studentsList) {
System . out. println ( student) ;
}
}
}
六、SpringBoot整合MyBatis(注解方式)
①:导入依赖
略~(可查考上面使用xml方式的配置)
②:创建实体类
略~(可查考上面使用xml方式的配置)
③:创建Mapper接口并添加MyBatis注解
添加Mybatis注解 针对增删改查:@Insert,@Delete,@Update,@Select
public interface StudentMapper2 {
@Select ( "select * from students" )
List < Students > findAll ( ) ;
@Select ( "select * from students where sname = #{name}" )
Students findByName ( @Param ( "name" ) String name) ;
}
④:数据库的信息和驼峰映射
# 连接数据库的信息
spring:
datasource:
driver- class - name: com. mysql. cj. jdbc. Driver
url: jdbc: mysql: / / localhost/ db_mybatis_demo2? characterset= utf- 8 & serverTimezone= UTC
username: root
password: root
type: com. alibaba. druid. pool. DruidDataSource
# mybatis配置
mybatis:
# 开启驼峰映射配置
configuration:
map- underscore- to - camel- case : true
⑤:测试
⑥:通过配置查看sql的执行过程
logging :
level :
com.it.springboot_01_demo1.mapper : DEBUG
七、SpringBoot整合分页助手
①:导入依赖
< dependency>
< groupId> com.github.pagehelper groupId>
< artifactId> pagehelper-spring-boot-starter artifactId>
< version> 1.3.0 version>
dependency>
②:测试
class StudentMapper2Test extends SpringBoot01Demo1ApplicationTests {
@Resource
private StudentMapper2 studentMapper2;
@Test
public void findByPage ( ) {
PageHelper . startPage ( 1 , 3 ) ;
List < Students > studentsList = studentMapper2. findAll ( ) ;
PageInfo < Students > pageInfo = new PageInfo < > ( studentsList) ;
List < Students > students = pageInfo. getList ( ) ;
for ( Students student: students) {
System . out. println ( student) ;
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
2. 直接运行会报错
3. 解决办法
依赖循环引用是不鼓励的,默认情况下是禁止的。更新应用程序以删除bean之间的依赖循环。作为最后的手段,可以通过设置spring.main来自动打破循环。allow-circular-references为true。
可以通过在配置文件中配置如下属性以恢复正常
spring.main.allow- circular- references=true
4. 在测试
八、SpringBoot整合JSP
①:导入依赖
< dependency>
< groupId> org.apache.tomcat.embed groupId>
< artifactId> tomcat-embed-jasper artifactId>
dependency>
< dependency>
< groupId> javax.servlet groupId>
< artifactId> jstl artifactId>
dependency>
②:创建webapp目录及JSP页面
1. 创建目录及jsp页面
<%@page contentType="text/html;charset=utf-8" language="java" pageEncoding="UTF-8" %>
< html>
< head>
< title> Title title>
head>
< body>
< h2> Hello World! h2>
body>
html>
③:设置前缀和后缀
1. 配置前缀和后缀
spring :
mvc :
view :
prefix : /WEB- INF/
suffix : .jsp
④:测试
1. 创建Controller类
@Controller
public class JspController {
@GetMapping ( "index" )
public String index ( Model model) {
model. addAttribute ( "name" , "张三" ) ;
return "index" ;
}
九、SpringBoo整合JUnit
1. 测试流程
2. 注意