1. 程式人生 > >SpringBoot學習筆記1 - 20181127

SpringBoot學習筆記1 - 20181127

一.引用

  1. 作用
  • 用來簡化Spring應用的初始化搭建以及開發過程。
  • 快速專案構建,簡化配置
  • Springboot(微框架)=Spring(專案管理框架)+SpringMVC(控制器)
  1. 規範(約定俗成)
  • 在底層子包外,有一個Application.java
    入口類,一個springboot專案,有且只有一個
  • springboot的約定(就是配置,也稱”約定大於配置“)
    applicaton.yml 或 application.properties,且必須在src/main/resources根目錄
  1. springboot的特點
    ①建立獨立的spring應用
    ②嵌入Tomcat,無需部署war檔案
    ③簡化Maven配置
    ④自動配置Spring
    ⑤沒有xml的配置

  2. 開發環境要求
    ①Maven 3以上
    ②Spring FrameWork 4以上
    ③Jdk1.7以上 boot2在1.8以上
    ④springboot 1.5以上

二.Springboot第一個搭建環境

  1. pom.xml依賴
	<!-- springboot的父級專案依賴 -->
	<parent>
   	 	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-parent</artifactId
>
<version>1.5.7.RELEASE</version> </parent> <!-- springboot的web依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 測試 -->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <!-- 只在test測試裡面執行 --> <scope>test</scope> </dependency>
  1. 書寫springboot的入口類 Application.java
@SpringBootApplication
public class Application {
	//啟動springboot應用
    public static void main(String[] args) {
		//引數1:springboot入口類物件、引數2:main函式的引數
        SpringApplication.run(Application.class,args);
    }
}

@SpringBootApplication
修飾範圍:只能用在入口類上 唯一
作用:
①.代表當前應用是一個springboot構建的應用
②.代表這個類是springboot的入口應用

  1. 書寫springboot的約定 application.yml
server:
  port: 9090
  context-path: /springboot

三.SpringBootApplication註解拆解

入口類上註解,是以下三個註解的組合

@SpringBootApplication		//自動配置spring相關內容
@EnableAutoConfiguration	//第三方jar與springboot自動配置
@ComponentScan				//手動指定包掃描,預設掃描入口類當前包及其包下子包

在這裡插入圖片描述

注意:
@SpringBootConfiguration繼承自@Configuration,二者功能也一致,標註當前類是配置類,
並會將當前類內宣告的一個或多個以@Bean註解標記的方法的例項納入到spring容器中,並且例項名就是方法名。

其他註解:
spring4中

@RestController		//基於restful風格控制器
			//使用在controller類上,相當於@Controller + @ResponseBody
			//作用:將類中所有方法的返回值以json格式響應

在這裡插入圖片描述

四.更換啟動banner圖

在resources包下,建立banner.txt,並在其中書寫內容,我的示例如下:

   ______          _____                                 ______          __   __   __
  / ____/ ____    / ___/  ____   __  __  _____  _____   / ____/ ____    / /  / /  / /
 / / __  / __ \   \__ \  / __ \ / / / / / ___/ / ___/  / / __  / __ \  / /  / /  / /
/ /_/ / / /_/ /  ___/ / / /_/ // /_/ / / /    (__  )  / /_/ / / /_/ / /_/  /_/  /_/
\____/  \____/  /____/ / .___/ \__,_/ /_/    /____/   \____/  \____/ (_)  (_)  (_)
                      /_/

五.Springboot的檢視解析 與 中文亂碼問題

springboot中預設的檢視解析器是:thymeleaf(view層框架)
springboot整合jsp:

  1. 引入springboot對jsp頁面支援依賴
	<!--jstl-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    
    <!--引入springboot 對jsp頁面的支援-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
  1. 通過約定,明確檢視解析器
    注意:使用main函式方式啟動預設內嵌的tomcat,不會解析jsp頁面
spring:
  mvc:
    view:	#試圖解析器
      prefix: /
      suffix: .jsp
  http:
    encoding:
      charset: utf-8	#中文亂碼問題
      force: true
  1. 專案中引入支援jsp啟動外掛
<plugins>

      <!--springboot 支援jsp啟動外掛-->
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      
</plugins>
  1. 使用外掛啟動,才能支援jsp頁面,右側maven中
    Pligins — springboot-boot — springboot:run
    【Lifecycle — clean 清除冗餘編譯】
    【springboot 1.5.x之後,使用內建tomcat8,編碼為utf-8 / 之前的編碼為iso-8859-1】
    【選中 single instance only 單例執行run,最方便】

六.springboot中約定的拆分(配置檔案的拆分)

spring.profiles.active:xxx #啟用哪個檔案生效(寫檔案-後邊單詞即可)
圖三

七.springboot與MyBatis整合

  1. 引入mybatis的依賴
	<!--引入springboot和mybatis整合jar-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.2</version>
    </dependency>

    <!--引入mysql-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>

    <!--druid-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>
  1. 配置application.yml
    ①資料來源
spring:    
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #指定資料來源
    driver-class-name: com.mysql.jdbc.Driver #指定驅動
    url: jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8 #指定url
    username: root
    password: root

②mapper配置檔案的位置 和 實體起別名

mybatis:
  mapper-locations: classpath:com/abc/mapper/*Mapper.xml #指定mapper配置檔案位置
  type-aliases-package: com.abc.entity #指定起別名的包
  1. 入口類上 加介面位置掃描
@SpringBootApplication
@MapperScan("com.abc.dao")
public class Application {
}

八.springboot本地測試JUnit

  1. 引入兩個測試依賴 junit4.12 和 spring-boot-start-test
	<dependency>
      	<groupId>junit</groupId>
      	<artifactId>junit</artifactId>
     	<version>4.12</version>
     	<scope>test</scope>
    </dependency>
    
    <!-- 測試 -->
    <dependency>
      	<groupId>org.springframework.boot</groupId>
      	<artifactId>spring-boot-starter-test</artifactId>
      	<!-- 只在test測試裡面執行 -->
      	<scope>test</scope>
    </dependency>
  1. 建立測試類示例
//在當前類例項化啟動springboot應用
//當測試類與入口類不平級時,需手動指定入口類;要求junit4.12
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class TestUser {
    @Autowired
    private UserDAO userDAO;

    @Test
    public void test1(){
        User user = userDAO.selectByPrimaryKey("1");
        System.err.println(user);
    }
}

ps:解決注入dao紅色下劃線問題!
在DAO介面加如下註解:

@Mapper
@Component(value = "userDAO")
public interface UserDAO {

@Mapper
@Component:定義Spring管理Bean,通過@Component將切面定義為Spring管理Bean,像@Service、@Controller、@Repository都是其擴充套件

  1. 其他
  • JUnit是一款優秀的開源Java單元測試框架,也是目前使用率最高最流行的測試框架,開發工具Eclipse和IDEA對JUnit都有很好的支援,JUnit主要用於白盒測試和迴歸測試。
    ~ 白盒測試:把測試物件看作一個開啟的盒子,程式內部的邏輯結構和其他資訊對測試人 員是公開的;
    ~ 迴歸測試:軟體或環境修復或更正後的再測試;
    ~ 單元測試:最小粒度的測試,以測試某個功能或程式碼塊。一般由程式設計師來做,因為它需要知道內部程式設計和編碼的細節;
  • 在測試資料操作的時候,我們不想讓測試汙染資料庫,也是可以實現的,只需要新增給測試類上新增“@Transactional” 即可,這樣既可以測試資料操作方法,又不會汙染資料庫了。

九.springboot中jsp頁面的熱部署

  1. 引入熱部署依賴(注意,先下載依賴,再配成外掛)
 	  <!--springboot 支援jsp啟動外掛-->
      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>

        <dependencies>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.7.RELEASE</version>
          </dependency>
        </dependencies>

     </plugin>
  1. 開啟idea自動編譯功能
    settings — Compiler — Build project automatically或Make~
  2. 配置檔案中
server:
  jsp-servlet:
    init-parameters:
      development: true #開啟jsp的熱部署配置

十.springboot 整合 FastJSON

  1. 引入依賴
	<dependency>
     	 <groupId>com.alibaba</groupId>
     	 <artifactId>fastjson</artifactId>
     	 <version>1.2.49</version>
    </dependency>
  1. 在入口類中加入配置
	//FastJson配置
   	 @Bean   //@Bean 將配置的東西作為bean物件,交給工廠處理
   	 public HttpMessageConverters fastjsonHttpMessageConverter(){
        //定義一個轉換訊息的物件
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

        //新增fastjson的配置資訊 比如 :是否要格式化返回的json資料
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);

        //在轉換器中新增配置資訊
        fastConverter.setFastJsonConfig(fastJsonConfig);
        HttpMessageConverter<?> converter = fastConverter;
        return new HttpMessageConverters(converter);
    }
  1. FastJson也可以利用 WebMvcConfigurerAdapter(非入口類方法)