京淘專案總結day02
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方法.所以不需要引入外掛。
相關文章
- 京淘專案筆記04 -- 2020.11.02筆記
- 前端專案框架搭建-day02前端框架
- 【Vue專案總結】後臺管理專案總結Vue
- BBS專案專案總結
- 專案總結
- Laravel 專案總結Laravel
- Nuxt專案總結UX
- 番茄專案總結
- 今日專案總結
- 專案總結整理
- lync專案總結
- sap 專案總結
- 專案總結【收集】
- 專案總結之專案失誤
- Vue + Canvas專案總結VueCanvas
- 小程式專案總結
- 爬蟲專案總結爬蟲
- 小程式專案-總結
- SSH框架專案總結框架
- 專案(SIMIS)總結(序)
- 準備專案總結
- Vue專案常用總結Vue
- 專案(Explore)總結之專案概述
- 黔村淘專案開發計劃
- 專案(Explore)總結之專案風險管理
- 專案(Explore)總結之專案整合管理
- 專案管理之---競投專案總結(轉)專案管理
- vue專案問題總結Vue
- OpenGL ES專案總結一
- 幾次外包專案總結
- MySQL專案實戰總結MySql
- ReactNative 專案工作總結React
- vue個人小專案總結Vue
- 日常專案經驗總結
- React移動專案總結React
- 專案執行及總結
- JavaScript 專案優化總結JavaScript優化
- BPR專案經驗總結