- 为了使用SSM框架去开发,准备SSM框架的模板配置。
- 为了Spring整合第三方框架,单独的去编写xml文件。
- 导致SSM项目后期xml文件特别多,维护xml文件的成本是很高的。
- SSM工程部署也是很麻烦,依赖第三方的容器。
- SSM开发方式是很笨重。
SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC,data-ipa等常用的框架封装到了一起,帮助你隐藏这些框架的整合细节,实现敏捷开发。
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 |
---|
8. 访问 http://localhost:8080/test |
---|
1. 运行启动类的main方法即可运行SpringBoot工程 |
---|
2. 采用maven的命令去运行SpringBoot工程 指令: mvn spring-boot:run |
---|
3. 采用jar包的方式运行 |
---|
1. 进入官网选择SpringBoot https://spring.io/ |
---|
2. 一直下滑 找到Spring initializr |
---|
3. 填写相关信息 |
---|
1. 排除tomcat服务器 |
---|
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
exclusion>
exclusions>
dependency>
2. 添加jrtty服务器的依赖 |
---|
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jettyartifactId>
dependency>
之前使用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") // 构建一个实例,放到spring容器中:相当于标签
public User getUser(){
User user = new User(1,"张三");
return user;
}
}
3. 咋TestController中添加一个新的方法 |
---|
@RestController
public class TestController {
@Autowired
// @Resource(name = "user1")
private User user;
@GetMapping("/test")
public String test() {
return "Hello SpringBoot";
}
@GetMapping("/user")
public User user() {
return user;
}
}
测试结果 |
---|
@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的配置文件支持properties和yml,甚至他还支持json。
更推荐使用yml文件格式
:
- 1.yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置。
- 2.yml文件,相比properties.更轻量级一些
yml文件的劣势
:
- 1.严格遵循换行和缩进。
- 2.在填写value时,一定要在:后面跟上空格
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=环境名 |
---|
1. 使用@Value获取值 |
---|
2. 一次性获取多个值 |
---|
3. 导入 spring-boot-configuration-processor 坐标 |
---|
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<version>2.6.11version>
dependency>
1. 问题分析 |
---|
2. 导入依赖 |
---|
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
dependency>
2.1 可以不指定版本 |
---|
3. 设置自动构建项目 |
---|
4.测试 |
---|
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包时 |
---|
1. 导入依赖 |
---|
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.2.6version>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.1.3version>
dependency>
1. 使用Idea自动创建 |
---|
2. 自动创建后在进行一定的调整和修改 |
---|
@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;
}
1. 创建Mapper接口 |
---|
public interface StudentMapper {
List<Students> findAll();
}
2. 在启动类中添加,扫描Mapper接口所在的包 |
---|
@MapperScan(basePackages = "com.it.springboot_01_demo1.mapper")
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配置
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
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);
}
}
}
略~(可查考上面使用xml方式的配置)
略~(可查考上面使用xml方式的配置)
添加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
1. 创建测试类并继承启动测试类 |
---|
# 查看sql语句
logging:
level:
com.it.springboot_01_demo1.mapper: DEBUG
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelper-spring-boot-starterartifactId>
<version>1.3.0version>
dependency>
class StudentMapper2Test extends SpringBoot01Demo1ApplicationTests {
@Resource
private StudentMapper2 studentMapper2;
@Test
public void findByPage(){
// 1. 执行分页(第一页 每页显示3条信息)
PageHelper.startPage(1, 3);
// 2. 执行查询
List<Students> studentsList = studentMapper2.findAll();
// 3. 封装PageInfo对象
PageInfo<Students> pageInfo = new PageInfo<>(studentsList);
// 4. 输出
List<Students> students = pageInfo.getList();
for (Students student:students) {
System.out.println(student);
}
}
}
2. 直接运行会报错 |
---|
3. 解决办法 |
---|
依赖循环引用是不鼓励的,默认情况下是禁止的。更新应用程序以删除bean之间的依赖循环。作为最后的手段,可以通过设置spring.main来自动打破循环。allow-circular-references为true。
可以通过在配置文件中配置如下属性以恢复正常
spring.main.allow-circular-references=true
4. 在测试 |
---|
<dependency>
<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-jasperartifactId>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
dependency>
1. 创建目录及jsp页面 |
---|
<%@page contentType="text/html;charset=utf-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>Titletitle>
head>
<body>
<h2>Hello World!h2>
body>
html>
1. 配置前缀和后缀 |
---|
spring:
# 配置视图的前缀和后缀
mvc:
view:
# 前缀:默认读取到 webapp 目录下
prefix: /WEB-INF/
suffix: .jsp
1. 创建Controller类 |
---|
@Controller
public class JspController {
@GetMapping("index")
public String index(Model model){
model.addAttribute("name","张三");
return "index";
}
1. 测试流程 |
---|
2. 注意 |
---|