欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot 总结

程序员文章站 2024-03-19 17:56:40
...

第1章

1.1 Spring Boot的概述

Spring Boot对Spring存在的问题(配置繁琐,损耗开发时间,项目的依赖管理耗时耗力)进行改善和优化,基于约定优于配置的思想,快速构建庞大的spring项目,尽可能减少一切xml配置,做到开箱即用。

1.2 Spring Boot的特点

  • 创建独立的spring应用程序
  • 尽可能自动配置spring和第三方类库
  • 开箱即用,没有代码生成,无需配置xml。
  • Spring Boot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

1.3 Spring Boot的核心功能

  • 起步依赖
    本质上是一个Maven项目对象模型,定义了对其他库的传递依赖。起步依赖就是将具有某种功能的坐标打包到一起,并提供一些默认的功能。(里面已经对各种常用的依赖的版本进行了管理)
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>
  • 自动配置依赖(启动器)
    为了让Spring Boot帮我们完成各种自动配置,必须引入Spring Boot提供的自动配置依赖,称为启动器。spring-boot-starter-parent工程将依赖关系声明为一个或者多个启动器,根据项目需求引入相应的启动器。SpringBoot要集成SpringMVC进行Controller的开发,所以引入web启动器。
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

第2章 Spring Boot快速入门

2.1 创建Maven工程

2.2 添加Spring Boot的起步依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>springboot_quick</artifactId>
    <version>1.0-SNAPSHOT</version>

	<!--起步依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

    <dependencies>
        <!--web的启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

2.3 编写Spring Boot的引导类


//声明该类是一个SpringBoot引导类
@SpringBootApplication
public class MySpringBootApplication {
    //main是java程序的入口
    public static void main(String[] args) {
        //run方法,表示运行SpringBoot的引导类  run参数就是SpringBoot引导类的字节码对象
        SpringApplication.run(MySpringBootApplication.class);
    }
}

2.4 编写Controller

@Controller
public class QuickController {
    @RequestMapping("/quick")
    @ResponseBody
    public String quick() {
        return "你好 springboot";
    }
}

2.5 测试

执行SpringBoot起步类的主方法,控制台打印日志如下:
Spring Boot 总结
Spring Boot 总结
打开浏览器访问:localhost:8080/quick
Spring Boot 总结

2.6 快速入门解析

2.6.1 Spring Boot代码解析

  • @SpringBootApplication:标注SpringBoot启动类,该注解具备多种功能。(其实是一个组合注解)
    * @SpringBootConfiguration:声明当前类就是SpringBoot应用的配置类
    * @EnableAutoConfiguration:开启自动配置
    * @ComponentScan:开启注解扫描
  • SpringApplication.run(MySpringBootApplication.class)代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象。

2.6.2 SpringBoot的热部署

1.在pom.xml中添加配置

<!--热部署配置-->
 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
 </dependency>

2.修改IDEA设置
Spring Boot 总结
然后Shift+Ctrl+Alt + /,选择Resgistry,勾选:compiler.automake.allow.when.app.running

第3章 Spring Boot 原理分析

3.1 起步依赖原理分析

3.1.1 分析spring-boot-starter-parent

从spring-boot-starter-dependencies的pom.xml中发现一部分坐标的版本,依赖管理,插件管理都已经定义好,所以起步依赖的作用就是依赖的传递。

3.1.2 分析spring-boot-starter-web

从spring-boot-starter-web的pom.xml中发现,spring-boot-starter-web就是将web要开发使用的spring-web,spring-webMVC等坐标打包,体现了依赖传递的作用。

3.2 自动配置原理解析

@SpringBootApplication:标注SpringBoot启动类,该注解具备多种功能。(其实是一个组合注解)

  • @SpringBootConfiguration:声明当前类就是SpringBoot应用的配置类,等同@Configuration
  • @EnableAutoConfiguration:开启自动配置
  • @ComponentScan:开启注解扫描

第4章 Spring Boot的配置文件

4.1 spring boot的配置文件类型

Spring Boot是基于约定的,许多配置都有默认值,如果要想替换默认配置的话,可以使用application.properties或者application.yml进行配置。
Spring Boot默认从Resources目录下加载配置文件。
两种文件格式区分:
application.properties文件

server.port=8888 
server.servlet.context-path=demo

applicatio.yml文件

server: 
	port: 8888 
	servlet: 
		context-path: /demo

4.2 配置文件于配置类的属性映射方式

4.2.1 使用@Value映射

application.yml配置如下:

person: 
	name: zhangsan 
	age: 18

Controller文件如下:

@Controller 
public class QuickStartController { 
		@Value("${person.name}") 
		private String name; 
		@Value("${person.age}") private Integer age; 

		@RequestMapping("/quick") 
		@ResponseBody 
		public String quick(){
		 return "springboot 访问成功! name="+name+",age="+age; 
		 } 
    }

浏览器访问:localhost:8080/quick
Spring Boot 总结

4.2.2 使用@ConfigurationProperties映射

application.yml配置如下:

person: 
	name: zhangsan 
	age: 18

Controller文件如下:

@Controller 
@ConfigurationProperties(prefix = "person") 
public class QuickStartController { 

	private String name; 
	private Integer age; 

	@RequestMapping("/quick") 
	@ResponseBody 
	public String quick(){ 
	return "springboot 访问成功! name="+name+",age="+age; 
	}

	public void setName(String name) { 
		this.name = name; 
	}
	public void setAge(Integer age) { 
	this.age = age; 
	} 
}

浏览器访问:localhost:8080/quick
Spring Boot 总结

第5章 Spring Boot整合其他技术

5.1 SpringBoot整合Mybatis

5.1.1 添加Mybatis的起步依赖

<!--mybatis起步依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

5.1.2 添加数据库驱动坐标

<!-- MySQL连接驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

5.1.3 添加数据库连接信息

在application.properties中添加数据量的连接信息

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

5.1.4 创建user表

在test数据库中创建user表

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

5.1.5 创建实体Bean

public class User {
    // 主键
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
    // 姓名
    private String name;
  
    //此处省略getter和setter方法 .. ..
    
}

5.1.6 编写Mapper

@Mapper
public interface UserMapper {
	public List<User> queryUserList();
}

注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中

5.1.7 配置Mapper映射文件

在src\main\resources\mapper路径下加入UserMapper.xml配置文件"

<?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.itheima.mapper.UserMapper">
    <select id="queryUserList" resultType="user">
        select * from user
    </select>
</mapper>

5.1.8 在application.properties中添加mybatis的信息

#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.springboot.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

5.1.9 编写测试Controller

@Controller
public class MapperController {

    @Autowired
    private UserMapper userMapper;

    @RequestMapping("/queryUser")
    @ResponseBody
    public List<User> queryUser(){
        List<User> users = userMapper.queryUserList();
        return users;
    }

}

5.1.10 测试

Spring Boot 总结

5.2 SpringBoot整合Junit

5.2.1 添加Junit的起步依赖

<!--测试的起步依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

5.2.2 编写测试类

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
public class MapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test() {
        List<User> users = userMapper.queryUserList();
        System.out.println(users);
    }

}

其中,

SpringRunner继承自SpringJUnit4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以

public final class SpringRunner extends SpringJUnit4ClassRunner 

@SpringBootTest的属性指定的是引导类的字节码对象

5.2.3 控制台打印信息

Spring Boot 总结

5.3 SpringBoot整合Spring Data JPA

5.3.1 添加Spring Data JPA的起步依赖

<!-- springBoot JPA的起步依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

5.3.2 添加数据库驱动依赖

<!-- MySQL连接驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

5.3.3 在application.properties中配置数据库和jpa的相关属性

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

#JPA Configuration:
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy

5.3.4 创建实体配置实体

@Entity
public class User {
    // 主键
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
    // 姓名
    private String name;
 
    //此处省略setter和getter方法... ...
}

5.3.5 编写UserRepository

public interface UserRepository extends JpaRepository<User,Long>{
    public List<User> findAll();
}

5.3.6 编写测试类

@RunWith(SpringRunner.class)
@SpringBootTest(classes=MySpringBootApplication.class)
public class JpaTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void test(){
        List<User> users = userRepository.findAll();
        System.out.println(users);
    }

}

5.3.7 控制台打印信息

Spring Boot 总结
注意:如果是jdk9,执行报错如下:

Spring Boot 总结

原因:jdk缺少相应的jar

解决方案:手动导入对应的maven坐标,如下:

<!--jdk9需要导入如下坐标-->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

5.4 SpringBoot整合Redis

5.4.1 添加redis的起步依赖

<!-- 配置使用redis启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

5.4.2 配置redis的连接信息

#Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

5.4.3 注入RedisTemplate测试redis操作

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class RedisTest {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Test
    public void test() throws JsonProcessingException {
        //从redis缓存中获得指定的数据
        String userListData = redisTemplate.boundValueOps("user.findAll").get();
        //如果redis中没有数据的话
        if(null==userListData){
            //查询数据库获得数据
            List<User> all = userRepository.findAll();
            //转换成json格式字符串
            ObjectMapper om = new ObjectMapper();
            userListData = om.writeValueAsString(all);
            //将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库
            redisTemplate.boundValueOps("user.findAll").set(userListData);
            System.out.println("===============从数据库获得数据===============");
        }else{
            System.out.println("===============从redis缓存中获得数据===============");
        }

        System.out.println(userListData);

    }

}