Spring Boot快速入門


Spring boot

一、Spring Boot介紹

1.1 引言

  • 為了使用ssm框架去開發,准備ssm框架的模塊配置
  • 為了spring 整合第三方框架,單獨寫xml配置文件
  • 導致ssm項目后期xml文件特別多,維護xml文件的成本很高
  • ssm部署也是很麻煩的,依賴第三方的容器
  • ssm開發方式很笨重

1.2 spring boot介紹

SpringBoot是由Privota團隊研發的,SpringBoot並不是一門技術,只是將之前常用的Spring,SpringMVC,data-jpa等常用的框架封裝到了一起,並隱藏了這些框架的整合細節,實現敏捷開發

Spring Boot就是一個工具類。

1.3 Spring Boot的特點

  1. Spring Boot項目不需要模板化的配置
  2. 在Spring Boot 中整合第三方的框架是,只需要導入相應的starter依賴包,就自動整合了
  3. Spring Boot默認只有一個.properties的配置文件,不推薦使用xml,后期會采用,.java文件去編寫配置信息
  4. SpringBoot工程部署時,采用的是jar包的方式,內部自動依賴Tomcat容器,提供了多環境的配置。
  5. 后期要學習的微服務框架Spring Cloud需要建立在Spring Boot 的基礎上。

二、Spring Boot快速入門

2.1 快速構建 Spring Boot工程

  1. 選擇項目的構建類型

  1. 項目的描述

  1. 指定版本和需要的依賴

第一次構建springboot項目時,會下載大量的依賴,要保證Maven配置了阿里雲的私服

  1. 修改pom.xml的依賴
<dependency>-->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 將上面修改成下面 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.1.RELEASE</version>
</dependency>
  1. 編寫一個testController的類
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController()
public class Testcontroller {

    @GetMapping("test")
    public String test(){
        return "Hello SpringBoot!";
    }

}
  1. 啟動過程,啟動main的方法
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FirstSpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(FirstSpringbootApplication.class, args);
    }

}

2.2 spring boot工程中的目錄結構

  1. pom.xml文件
  2. 指定了一個父工程,指定了當前工程中為springboot,幫助我們聲明了starter依賴的版本
  3. 項目的元數據:包名,項目名,版本號
  4. 指定了properties信息:指定了java的版本1.8
  5. 導入依賴:默認情況下導入spring-boot-starter, spring-boot-starter-test
  6. 插件:spring-boot-maven-plugin
  1. .gittignore文件:默認幫助我們忽略了一些文件和目錄
  1. src目錄
- src
  - main
  	- java 
  		- 包名
  			啟動類.java   # 需要將controller類,放在啟動類的子類包中或者同級包下
  	- resources
  		- static   # 存放靜態資源的
  		- templates  # 存儲模板頁面的
  		application.porperties  # SpringBoot提供的唯一的配置文件
  - test # 測試用的

2.3 三種啟動方式

  1. 運行啟動類的main方法即可運行springboot工程

  2. 采用maven的命令去運行spring Boot工程

mvn spring-boot:run

  1. 采用jar包的方式運行
  • 將當前的項目打包成一個jar文件

    mvn clean package

  • 通過 java -jar jar文件

三、Spring Boot常用注解

3.1 @Configuration和@Bean

之前使用ssm去開發的時候,在xml文件中編寫bean標簽。

但是spring boot不推薦使用xml文件

@configuration注解相當於beans標簽

@Bean注解相當於bean標簽

​ id="方法名 | 注解中的name屬性(優先級更高)"

​ class="方法的放回結果"

@Configuration           // 代表當前類是一個配置類
public class UserConfig {

    @Bean(name = "user1")
    public User user(){
        User user = new User();
        user.setId(1);
        user.setName("張三");
        return user;
    }

    /*
    <beans .....>  @Configuration
        @Bean
        <bean id="user1" class"com.gopan.firstspringboot.entity.User">
    </beans>
    */
}

3.2 @SpringBootApplication

@SpringBootApplication是一個組合注解

  1. @SpringBootConfiguration就是@Comfiguration注解,代表我的啟動類激素hi一個配置類
  1. @EnableAutoConfiguration幫你實現自動裝配的,SpringBoot工程啟動時,運行一個SpringFactoriesLoader的類,加載META-INF/spring.factories配置類(已經開啟的),通過SpringFactoriesLoader中的load方法,以For循環的方式,一個一個地加載。

好處:無需編寫大量的整合配置信息,只需要按照SpringBoot提供好了約定去整合即可。

壞處:如果導入了starter依賴,那么你就需要填寫他必要的配置信息。

手動關閉自動裝配指定內容

@SpringBootApplication(exclude = QuartzAutoConfiguration.class)
  1. @ComponentScan就相當於<context:component-scan basePackage="包名"/>

幫助掃描注解的

四、Spring Boot常用·配置

4.1 Spring Boot 的配置文件的格式

SpringBoot的配置文件支持properties和yml,甚至還支持json

更推薦使用yml文件格式:

  1. yml文件 會根據換行和縮進幫助咱們管理配置文件的所在位置。

    使用properties文件配置很難管理,需要手動管理

  2. yml 文件,相比於properties更輕量級一些

yml文件的劣勢:

  1. 嚴格遵循換行和所縮進
  2. 在填寫value時,一定要在:后面跟上空格

4.2 多環境配置

在application.yml文件中添加一個配置項:

spring:
 profiles:
   active: 環境名

在resourcea目錄下,創建多個application-環境名.yml即可

在部署工程時,通過 java -jar 文件 - - spring.profiles.active = 環境名

4.2 引入外部配置文件信息

和傳統的ssm的方式一樣,通過@value的注解去獲取properties/yml文件中的內容

如果在yml文件中需要編寫大量的自定義的配置,並且具有統一的前綴時,可以采用下方方式

@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperities {

    private String  xxxx;

    ...

}
aliyun:
  xxxx: xxxxxxxx
  ...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

4.4 熱加載

  1. 導入依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
  1. 修改settings中的配置

  1. 修改內容后,可以通過build重新構建工程

五、Spring Boot 整合Mybits

5.1 xml方式整合Mybatis

  1. 導入依賴
<!--        mysql驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>


<!--        druid連接-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>


        <!--        mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
  1. 編寫配置文件
// 1. 准備實體類

@Data
public class Air {

  private long id;

  private long districtId;

  private java.sql.Date monitorTime;

  private long pm10;

  private long pm25;

  private String monitoringStation;

  private java.sql.Date lastModifyTime;

}
// ----------------------------------------

@Data
public class District {

  private long id;

  private String name;

}
// 2.2 准備Mapper接口
public interface AirMapper {
    List<Air> findAll();
}
// 在啟動類中添加直接,掃描Mapper接口所在的包
@MapperScan(basePackages = "com.gopan.firstspringboot.mapper")
<!-- 2.3 准備映射文件 -->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gopan.firstspringboot.mapper.AirMapper">
<!--    List<Air> findAll();-->
    <select id="findAll" resultType="Air">
        select * from air
    </select>

</mapper>
# 添加yml文件的配置信息
# Mybatis配置
mybatis:
  # 掃描映射的文件
  mapper-locations: classpath:mapper/*.xml
  # 配置別名掃描的包
  type-aliases-package: com.gopan.firstspringboot.entity
  configuration:
    # 開啟駝峰映射
    map-underscore-to-camel-case: true
# 2.3 指定連接數據庫的信息

# 連接數據庫的信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///air?serverTimezone=UTC
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
  1. 測試

在Mapper接口的位置,直接右鍵 -> goto -> Test

會自動創建當前的接口的測試類,在test目錄下。

讓當前的測試類,繼承FirstSpringbootApplicationTests測試類(在class前添加,public)

class AirMapperTest extends FirstSpringbootApplicationTests {
    @Autowired
    private AirMapper airMapper;

    @Test
    void findAll() {
        List<Air> list = airMapper.findAll();
        for (Air air : list) {
            System.out.println(air);
        }
    }
}

5.2 注解方式整合Mybatis

  1. 創建District的Mapper接口
public interface DistrictMapper {
    List<District> findAll();
}
  1. 添加Mybatis注解

針對增刪改查:@Insert @Delete @Update @Select

還是需要在啟動類中添加@MapperScan注解

public interface DistrictMapper {

    @Select("select * from district")
    List<District> findAll();

    @Select("select * from district where id = #{id}")
    District findOneById(@Param("id") Integer id);
}
  1. 測試,看到執行的sql語句
# 查看sql語句
logging:
  level:
    com.gopan.firstspringboot.mapper: DEBUG
class DistrictMapperTest extends FirstSpringbootApplicationTests {

    @Autowired
    private DistrictMapper mapper;

    @Test
    void findAll() {
        List<District> list = mapper.findAll();
        for (District district : list) {
            System.out.println(district);
        }
    }

    @Test
    void findOneById() {
        District dis = mapper.findOneById(5);
        System.out.println(dis);
    }
}

5.3 SpringBoot整合分頁助手

  1. 導入依賴
<!-- pageHelper依賴 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>
  1. 測試使用
@Test
public void findByPaage(){
    // 1. 執行分頁
    PageHelper.startPage(1,1);

    // 2. 執行查詢
    List<Air> list = airMapper.findAll();

    // 3. 封裝PageInfo對象
    PageInfo<Air> pageInfo = new PageInfo<>(list);

    // 4. 輸出
    for (Air air : pageInfo.getList()) {
        System.out.println(air);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM