京淘專案總結day02

weixin_44068499發表於2020-10-29

1 SpringBoot高階用法

1.1 配置檔案說明

1.1.1 關於properties

(1)語法:K-V結構(key=value)
(2)資料結構:預設是String,注意不要加多餘的引號。
(3)字元資料型別:properties的預設載入編碼格式為:ISO-8859-1。
(4)缺點:所有的key都必須手動配置,沒辦法複用,所以引入了yml配置。

server.port=8080

1.1.2 關於yml

(1)語法:K-V結構,寫法上為:key:value,實質上為:key=value。
key:value中間使用(:+空格)分隔。key與key之間有父子級關係,所以寫的時候要注意縮排項。
(2)字元資料型別:yml預設的格式是UTF-8編碼。

server:
  port: 8090

1.2 SpringMVC的呼叫流程

1.2.1 核心元件

(1)前端控制器 所有請求的中轉站
(2)處理器對映器 將使用者的請求與執行的業務方法進行對映(繫結)
(3)處理器介面卡
(4)檢視解析器

1.2.2 呼叫流程

在這裡插入圖片描述

1.3 關於配置檔案的賦值操作

1.3.1 案例

package com.jt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController    //@ResponseBody 將返回值轉化為json串使用 程式將不會執行檢視解析器 直接返回
//@Controller          //String型別/moduleAndView
public class RedisController {

    private String host = "127.0.0.1";
    private Integer port = 6379;

    //如果使用RestController 返回值為String型別則返回字串本身
    //如果返回的是一個物件 則結果必然是該物件的JSON資料.
    @RequestMapping("/getMsg")
    public String getMsg(){

        return host + ":" + port;
    }
}

1.3.2 @Value註解屬性賦值

需求: 有時物件中的屬性的值可能會發生變化,如果直接寫死到程式碼中可能導致耦合性高. 能否利用配置檔案方式動態的為屬性賦值。

package com.jt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController             //@ResponseBody 將返回值轉化為json串使用 程式將不會執行檢視解析器 直接返回
                             //String型別/moduleAndView
public class RedisController {
    /**
     * 實現思路:
     *   如果可以從容器中獲取資料的化,直接賦值給屬性.則可以實現解耦
     * 如何實現:
     *      註解實現: @Value("${配置檔案的key}")
     * 表示式:  spel 表示式
     */
    @Value("${redis.host}")
    private String host;
    @Value("${redis.port}")
    private Integer port;
    //如果使用RestController 返回值為String型別則返回字串本身
    //如果返回的是一個物件 則結果必然是該物件的JSON資料.
    @RequestMapping("/getMsg")
    public String getMsg(){
        return host+":"+port;
    }
}
redis:
  host: 192.168.1.100
  port: 6379

1.3.3 用properties檔案為屬性賦值

由於YML配置檔案一般都是配置第三方的整合的資訊,如果將業務的資料新增到YML中則不規範.最好將業務的操作新增到properties檔案中。
新增配置檔案:
在這裡插入圖片描述
編輯RedisPro配置檔案

package com.jt.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
//需要通過spring容器載入配置檔案,並且以utf-8 的格式進行載入
@PropertySource(value = "classpath:properties/redis.properties",encoding="utf-8")
public class RedisProController {
     @Value("${redis.pro.host}")
    private String proHost;
    @Value("${redis.pro.port}")
    private Integer proPort;

    @RequestMapping("doPro")
    public String doPro(){
        return proHost+":"+proPort;
    }
}

1.4 SpringBoot環境切換

1.4.1 業務需求

業務場景:
員工是外包人員,經常性的需要往返公司和甲方,進行程式碼除錯時由於位置不同所以伺服器IP地址必然不同.如果每次換環境都必須重新編輯IP地址和埠等資料,必定繁瑣能否優化??

1.4.2 業務實現-指定多個環境

注意事項:無論什麼樣的環境,配置的個數都是相同的,只是值不同。

#環境切換
#該配置檔案,當spring容器啟動時載入
spring:
  profiles:
    active: dev    #預設載入

#環境分割線(------  
#定義開發環境
spring:
  profiles: dev

server:
  port: 8090
#配置Redis節點資訊
redis:
  host: 192.168.1.100
  port: 6379
#如果需要多環境配置則將yml環境分割
---
spring:
  profiles: pro
server:
  port: 1314
redis:
  host: 10.0.1.100
  port: 6379

1.5 新增熱部署配置

(1)新增jar包檔案

		<!--支援熱部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>

(2)IDEA工具配置
組合鍵:Ctrl + Shift + Alt + /
在這裡插入圖片描述
(3)開啟自動編譯即可
在這裡插入圖片描述

1.6 SpringBoot整合Mybatis

1.6.1 編輯yml配置檔案

server:
  port: 8090
  servlet:
    context-path: /
spring:
  datasource:
    #驅動版本問題 高版本需要新增cj關鍵字  一般可以省略
    #driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

mybatis:
  #別名包定義 Mapper的resultType中只需要寫類名 之後自動拼接即可
  type-aliases-package: com.jt.pojo
  #載入指定的xml對映檔案
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #開啟駝峰對映
  configuration:
    map-underscore-to-camel-case: true

1.6.2 關於SQL連線說明

(1)serverTimezone=GMT%2B8 %2B 代表 "+"號 表示時區
(2)useUnicode=true&characterEncoding=utf8 指定編碼為utf-8
(3)autoReconnect=true& 如果程式連線資料庫中途斷掉時是否重連.
(4)allowMultiQueries=true 是否允許批量操作
eg: 要求一次入庫3張表資料… 要求用一行sql實現該操作

1.6.3 關於Mapper.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">
<!--namespace:一般與介面的路徑一致-->
<mapper namespace="com.jt.mapper.UserMapper">
	
	<!--<select id="findAll" resultType="User">
		select * from user
	</select>-->

	<!--
		業務需求:
			要求實現資料庫的查詢,但是資料庫表欄位與物件的屬性不一致.
		eg:
			user表(欄位 user_id,user_name,user_age......)
			User物件(屬性 userId,userName,userAge)
		說明: 引入駝峰對映規則.
		執行順序: 1獲取user_id~~~~去掉多餘的"_"字母大寫 ~~~~userId
				 實現資料的對映.
		注意事項: 如果使用駝峰規則對映則必須滿足規範..
	-->
	<!--<select id="find" resultType="" resultMap="手動封裝"></select>-->

</mapper>

1.6.4 關於@AutoWired註解的屬性報錯問題

在這裡插入圖片描述

1.6.5 關於@Mapper註解的優化

由於每個介面都需要新增Mapper註解導致程式碼繁瑣.可以採用包掃描的方式動態匯入 程式碼如下

@SpringBootApplication
@MapperScan("com.jt.dao") //主要告訴mapper的包路徑,會自動的完成包掃描
public class SpringbootDemo2MybatisApplication {

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

}

1.7 Lombok配置

(1)新增jar包

  <!--引入外掛lombok 自動的set/get/構造方法外掛  -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

(2)Lombok案例

package com.jt.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data  //動態生成get/set/toString/equals等方法
@Accessors(chain = true)   //開啟鏈式載入結構(重構了set方法可以連續打點呼叫)
@NoArgsConstructor     //無參構造   必須加
@AllArgsConstructor     //全參構造
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

(3)安裝外掛
在這裡插入圖片描述
(4)lombok面試題
問題: java專案開發完成之後需要在Linux系統中部署專案. 問題:Linux環境中是否需要單獨安裝LomBok外掛???
答:不需要。

解析: LOMBOK外掛編譯器有效 xxx.java檔案----編譯-----xxx.class 動態的生成set/get/toString等方法新增到.class檔案中即可. Linux中執行的jar包是.class檔案的集合 已經有了get/set方法.所以不需要引入外掛。