Spring Boot的快速入门和整合

目录

Spring Boot 概述

Spring Boot 入门

java代码方式配置

Spring Boot 属性注入方式

多个yml文件配置

自动配置原理

lombok应用

Spring整合-SpringMVC

Spring整合-事务和连接池

Spring整合-Mybatis

Spring整合-通用Mapper

Spring整合-Junit

Spring整合-redis

Spring Boot项目部署


Spring Boot 概述

Spring Boot是一个便捷搭建 基于spring工程的脚手架;作用是帮助开发人员快速搭建大型的spring 项目。简化工程的配置,依赖管理;实现开发人员把时间都集中在业务开发上。


Spring Boot 入门

实现步骤:

  1. 创建工程
  2. 添加依赖(启动器依赖)
  3. 创建启动类
  4. 创建处理器Controller
  5. 测试

代码实现

  1. 创建工程

创建一个Maven工程

  1. 添加依赖 (spring-boot-starter-web )
 <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.6.6</version>
    </parent>
    <groupId>com.itheima</groupId>
    <artifactId>heima-springboot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
    <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
  1. 创建启动类
/*
这是一个启动器依赖,这是工厂的入口类
并在引导类上添加@SpringBootApplication
 */

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        //启动并告诉她引导类是谁
        SpringApplication.run(Application.class,args);

    }
}
  1. 创建处理区
//控制
@RestController
public class HelloController {
    
    @GetMapping("hello")
    public String hello(){
        return  "Hello,SpringBoot!";
        
    }
}


java代码方式配置

比较常用的注解:

@Configuration :声明一个类作为配置类,代替xml文件

@Bean :声明在方法上,将方法的返回值加入Bean容器,代替 <bean> 标签

@Value :属性注入

@PropertySource :指定外部属性文件

使用Java配置数据库连接池

步骤

  1. 添加依赖
  2. 创建数据库
  3. 创建数据库连接参数的配置文件jdbc.properties
  4. 创建配置类
  5. 改造处理器类注入数据并使用

代码实现

步骤

  1. 添加依赖
  <dependency> 
             <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
  1. 创建数据库
  2. 创建数据库连接参数的配置文件jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver 
  jdbc.url=jdbc:mysql://127.0.0.1:3306/health
  jdbc.username=root 
  jdbc.password=123456
  1. 创建配置类(config)
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
    
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return  dataSource;
    }
    
}
  1. 改造处理器类注入数据并使用
@RestController
public class HelloController {

    @Autowired
    private DataSource dataSource;
    
    @GetMapping("hello")
    public String Hello(){
        System.out.println(dataSource);
        return "hello,springBoot!";
    }
}

Spring Boot 属性注入方式

目标

  1. 能够使用@ConfigurationProperties实现Spring Boot配置文件配置项读取和应用
  2. 将配置文件中的配置想读取到一个对象中

实现

  1. 可以使用Spring Boot提供的注解@ConfigurationProperties,该注解可以将Spring Boot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中。
  2. 使用@ConfigurationProperties编写配置项类将配置文件中的配置项设置到对象中

实现步骤

  1. 创建配置项类JdbcProperties类,类名上添加@ConfigurationProperties
  2. 将jdbc.properties修改名称为application.properties
  3. 将JdbcProperties对象注入到JdbcConfig

代码实现

  1. 创建配置项类JdbcProperties类,类名上添加@ConfigurationProperties
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {

    private  String  driverClassName;
    private  String  url;
    private  String  username;
    private  String  password;

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    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;
    }
}
将jdbc.properties修改名称为application.properties
将JdbcProperties对象注入到JdbcConfig
@Configuration
EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {


       @Bean
        public DataSource dataSource(JdbcProperties jdbc){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(jdbc.getDriverClassName());
        dataSource.setUrl(jdbc.getUrl());
        dataSource.setUsername(jdbc.getUsername());
        dataSource.setPassword(jdbc.getPassword());
        return  dataSource;

    }

更优雅的注入

事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties,将该类上的所有注解去掉)中。而是直接在需要的地方声明即可;再次修改 JdbcConfig 类为如下代码

 @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public  DataSource dataSource(){
        return new DruidDataSource();
    }

多个yml文件配置

可以将多个yml文件在application.yml文件中配置激活
yaml与properties配置文件除了展示形式不相同以外,其它功能和作用都是一样的;在项目中原路的读取方式不需要改变。

yml配置文件的特征:

1. 树状层级结构展示配置项;
2. 配置项之间如果有关系的话需要分行空两格;
3. 配置项如果有值的话,那么需要在 `:`之后空一格再写配置项值;

yml
jdbc:
  driverClassName: com.mysql.jdbc.Driver//这有一个空格
  url: jdbc:mysql://127.0.0.1:3306/heima
  username: root
  password: root

key:
  abc: cba
  def:
    - g
    - h
    - j

  1. 多个yml配置文件;在spring boot中是被允许的。这些配置文件的名称必须为application-***.yml,并且这些配置文件必须要在application.yml配置文件中激活之后才可以使用。

  1. 如果properties和yml配置文件同时存在在spring boot项目中;那么这两类配置文件都有效。在两个配置文件中如果存在同名的配置项的话会以properties文件的为主。在多个配置文件时,需要将这些文件在application.yml文件中进行激活:

激活配置文件;需要指定其它的配置文件名称

spring:
  profiles:
    active: abc,def

自动配置原理

目标:

了解Spring Boot项目的配置加载流程

小结

META-INF\spring.fatories文件中定义了很多自动配置类;可以根据在pom.xml文件中添加的 启动器依赖自动配置组件
通过如下流程可以去修改application配置文件,改变自动配置的组件默认参数


lombok应用

分析:

使用lombok的注解实现pojo类的简化 , 使用Spring Boot整合SSM工程;需要使用到数据库数据。

  • 将数据库表数据导入到数据库中(springboot_test)
  • 编写数据库表对应的实体类;一般情况下需要编写get/set/toString等这些方法会耗时并且会让实体类看起来比较臃肿。可以使用lombok插件对实体类进行简化
  • lombok是一个插件工具类包;提供了一些注解@Data、@Getter等这些注解去简化实体类中的构造方法、get/set等方法的编写。

步骤:

  1. 在idea中安装lombok插件
  2. 添加lombok对应的依赖到Maven中
  3. 改造实体类使用lombok注解

小结

在Bean上使用:
@Data :自动提供getter和setter、hashCode、equals、toString等方法
@Getter:自动提供getter方法
@Setter:自动提供setter方法
@Slf4j:自动在bean中提供log变量,其实用的是slf4j的日志功能。

代码实现:

  1. 在idea中安装lombok插件

  1. 添加lombok对应的依赖到Maven中
  <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
  1. 改造实体类使用lombok注解
//在编译阶段会根据注解自动生成对应的方法;
// data包含get/set/hashCode/equals/toString等方法
@Data
public class User {
 
    private Long id;

    private String userName;
    
    private String password;

    private String name;

    private Integer age;

    private Integer sex;

    private Date birthday;

    private String note;

    private Date created;

    private Date updated;
}


Spring整合-SpringMVC

修改端口

修改tomcat端口:

  1. 查询**Properties,设置配置项(前缀+类变量名)到application配置文件中访问项目中的静态资源
  2. 静态资源放置的位置;放置静态资源并访问这些资源
#tomcat端口
server:
port: 80

访问静态资源

在spring boot项目中静态资源可以放置在如下目录:

  1. classpath:/META-INF/resources/
  2. classpath:/resources/
  3. classpath:/static/
  4. classpath:/public

只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。

我们习惯会把静态资源放在 classpath:/static/ 目录下。

添加拦截器

实现思路

  1. 编写拦截器 (实现HandlerInterceptor)
  2. 编写配置类实现 WebMvcConfigurer,在该类中添加各种组件

代码实现

  1. 编写拦截器 (实现HandlerInterceptor)
@Slf4j
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("这是MyInterceptor拦截器的preHandle方法");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.debug("这是MyInterceptor拦截器的postHandle方法");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.debug("这是MyInterceptor拦截器的afterCompletion方法");
    }
}
  1. 编写配置类实现 WebMvcConfigurer,在该类中添加各种组件
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    //注册拦截器
    @Bean
    public MyInterceptor myInterceptor(){
        return  new MyInterceptor();
    }
    //添加拦截器到spring mvc拦截器链当中


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor()).addPathPatterns("/*");
    }
}

结构组成

Spring整合-事务和连接池

目标:

配置Spring Boot自带默认的hikari数据库连接池和使用@Transactional注解进行事务配置

数据库连接池hikari配置,事务配置

基本思路:

  1. 添加事务相关的启动器依赖,mysql相关依赖;
  2. 编写业务类UserService使用事务注解@Transactional

代码实现:

  1. 添加事务相关的启动器依赖,mysql相关依赖;
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
  1. 编写业务类UserService使用事务注解@Transactional
@Service
public class UserService {

    //查询
    public User getUserById(Long id){
       return new User();
    }

    //新增用户
    @Transactional
    public void save(){
        System.out.println("新增用户成功!!!");
    }


}


Spring整合-Mybatis

目标:

配置Mybatis在Spring Boot工程中的整合包,设置mybatis的实体类别名,输出执行sql语句配置项

实现思路:

  1. 添加配置依赖
  2. 配置Mybatis:实体类别名包,日志,映射文件
  3. 配置MapperScan

代码实现:

  1. 添加配置依赖
 <!--mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
  1. 配置Mybatis:实体类别名包,日志,映射文件
  mybatis:
    # 实体类别名包路径
    type-aliases-package: com.itheima.pojo
    # 映射文件路径
    # mapper-locations: classpath:mappers/*.xml
    #日志配置
    configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  1. 配置MapperScan


Spring整合-通用Mapper

通用Mapper:

可以实现自动拼接sql语句;所有的mapper都不需要编写任何方法也就是不用编写sql语句。可以提高开发效率。

实现思路:

  1. 添加启动器依赖
  2. 改造UserMapper继承Mapper<T>
  3. 修改启动引导类Application中的Mapper扫描注解
  4. 修改User实体类添加jpa注解
  5. 改造UserService实现业务功能

代码实现 :

  1. 添加启动器依赖
 <!-- 通用mapper -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
  1. 改造UserMapper继承Mapper<T>
  2. 修改启动引导类Application中的Mapper扫描注解
  3. 修改User实体类添加jpa注解
  4. 改造UserService实现业务功能


Spring整合-Junit

目标:

在Spring Boot项目中使用Junit进行单元测试UserService的方法

实现:

添加启动器依赖spring-boot-starter-test

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

测试代码

在Spring Boot项目中如果编写测试类则必须要在类上面添加@SpringBootTest !!!

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void queryById() {
        User user = userService.queryById(8L);
        System.out.println("user = " + user);
    }

    @Test
    public void saveUser() {
        User user = new User();
        user.setUserName("test2");
        user.setName("test2");
        user.setAge(13);
        user.setPassword("123456");
        user.setSex(1);
        user.setCreated(new Date());
        userService.saveUser(user);
    }
}



Spring整合-redis

目标:

在Spring Boot项目中使用Junit测试RedisTemplate的使用

基本思路:

  1. 添加启动器依赖;spring-boot-starter-data-redis
  2. 配置application.yml中修改redis的连接参数;(redis需要启动)
  3. 编写测试类应用RedisTemplate操作redis中的5种数据类型(string/hash/list/set/sorted set)

代码实现:

  1. 添加启动器依赖;spring-boot-starter-data-redis
<dependency> 
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置application.yml中修改redis的连接参数;(redis需要启动)

  1. 编写测试类应用RedisTemplate操作redis中的5种数据类型(string/hash/list/set/sorted set)
package com.itheima.redis; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.data.redis.core.RedisTemplate; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.context.junit4.SpringRunner; 
import java.util.List; 
import java.util.Set; 
@RunWith(SpringRunner.class) 
@SpringBootTest 
public class RedisTest { 
@Autowired 
private RedisTemplate redisTemplate; 
@Test 
public void test(){ 
//string字符串 
//redisTemplate.opsForValue().set("str", "heima"); 
redisTemplate.boundValueOps("str").set("heima"); 
System.out.println("str = " + redisTemplate.opsForValue().get("str")); 
//hash散列 
redisTemplate.boundHashOps("h_key").put("name", "黑马"); 
redisTemplate.boundHashOps("h_key").put("age", 13); 
//获取所有域对应的值 
Set set = redisTemplate.boundHashOps("h_key").keys(); 
System.out.println("hash散列所有的域:" + set); 
List list = redisTemplate.boundHashOps("h_key").values(); 
System.out.println("hash散列所有的域值:" + list); 
//list列表 
redisTemplate.boundListOps("l_key").leftPush("c"); 
redisTemplate.boundListOps("l_key").leftPush("b"); 
redisTemplate.boundListOps("l_key").leftPush("a"); 
list = redisTemplate.boundListOps("l_key").range(0, -1); 
System.out.println("列表的值:" + list); 
//set集合 
redisTemplate.boundSetOps("set_key").add("a", "b", "c"); 
set = redisTemplate.boundSetOps("set_key").members(); 
System.out.println("集合的元素:" + set); 
//sorted set有序集合 
redisTemplate.boundZSetOps("z_key").add("a", 30); 
redisTemplate.boundZSetOps("z_key").add("b", 20); 
redisTemplate.boundZSetOps("z_key").add("c", 10); 
set = redisTemplate.boundZSetOps("z_key").range(0, -1); 
System.out.println("有序集合的元素:" + set); 
} 
} 

Spring Boot项目部署

目标:

将Spring Boot项目使用maven指令打成jar包并运行测试

基本思路:

  1. 需要添加打包组件将项目中的资源、配置、依赖包打到一个jar包中;可以使用maven的package
  2. 部署:java -jar 包名

代码实现:

  1. 需要添加打包组件将项目中的资源、配置、依赖包打到一个jar包中;可以使用maven的package
<build>
        <plugins>
            <!-- 打jar包时如果不配置该插件,打出来的jar包没有清单文件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  1. 部署:java -jar 包名

  1. 运行

运行打出来的包;使用命令: java –jar 包全名 或者写一个 bat 文件,里面包含 java –jar 包全名;这样就可以双击启动应用。

java -jar heima-springboot-1.0-SNAPSHOT.jar

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值