12月最後一個月,明天就是2020年了,回顧2019,感覺成長了許多,2020,希望能繼續保持對技術的熱情,做自己喜歡做的事,明年,也將畢業啦,從此便是社會人。🏷️
1. JRebel實現熱部署減少重啓時間
平時我們在開發中總是需要不斷修改Service層或者其他層的代碼,這時候如果項目大的話,重啓一次要幾十秒,這是十分痛苦的事情,這時候熱部署就生效了。
這裏使用JRebel的熱部署,在IDEA中裝插件就可以了。破解的話需要半年一次。
- 破解可以參考這篇文章
- 然後需要重新生成id,在這
- 然後填寫具體路徑即可。http://127.0.0.1:8888/e4188520-e963-484e-ae3d-e42b4b0861ee
- 然後在項目中就能用了,直接右鍵即可。
2.使用Mybatis-plus自動填充創建時間和修改時間
創建時間和修改時間都是平時在插入數據或者修改數據時都是要新建或者修改的,不必要每次都去修改,可以使用Mybatis-plus 的自動填充功能。
- 實現元對象處理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
@Component
public class MetaObjectHandlerConfig implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Object createTime = getFieldValByName("createdAt", metaObject);
Object updateTime = getFieldValByName("updatedAt", metaObject);
if (createTime == null){
setFieldValByName("createdAt", LocalDateTime.now(), metaObject);
}
if (updateTime == null){
setFieldValByName("updatedAt", LocalDateTime.now(), metaObject);
}
}
- 註解填充字段 @TableField(fill = FieldFill.INSERT) !
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createdAt;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedAt;
- 字段必須聲明TableField註解,屬性fill選擇對應策略,該申明告知 Mybatis-Plus 需要預留注入 SQL 字段。
- 填充處理器MyMetaObjectHandler 在 Spring Boot 中需要聲明@Component 注入。
- 必須使用父類的setFieldValByName()或者setInsertFieldValByName/setUpdateFieldValByName方法,否則不會根據註解FieldFill.xxx來區分。
3.常用註解的學習
1. @Profile: 指示一個或多個指定配置文件處於活動狀態時,就執行,官方文檔解釋,這裏指定環境爲prod生產環境時運行。執行相應內容,輸出文字。
2. @Value 註解爲讀取配置文件的內容。
spring:
profiles:
active: prod
3. @Bean註解
Spring的@Bean註解用於告訴方法,產生一個Bean對象,然後這個Bean對象交給Spring管理。產生這個Bean對象的方法Spring只會調用一次,隨後這個Spring將會將這個Bean對象放在自己的IOC容器中。
4. @JsonView和@JsonProperty註解
@JsonView可以過濾序列化對象的字段屬性,可以使你有選擇的序列化對象。一般用的比較多的地方就是在返回的VO或者屬性上指定哪些不需要返回,然後在Controller上用@JsonView指定哪個方法用哪個過濾條件,這個還有繼承的機制,也可以使用瞭解下。
JsonView參考
@JsonProperty的話是定義在屬性上,當你需要指定返回的屬性跟前端約定的名稱不同時,或者前端dto傳入參數跟你的bean屬性名不同,這個時候就可以在屬性上面@JsonProperty註解指定名稱。
5. @JsonInclude註解
@JsonInclude(JsonInclude.Include.NON_NULL)作用在類上的話表示如果這個類中的屬性如果值爲null,則不返回。感覺還是很好用的。
6. @EnumVerify註解
@EnumVerify註解,可以在DTO入參的時候對參數指定枚舉的類型判斷,這樣就不用在代碼中判斷啦。
@EnumVerify(message = "請選擇正確的客戶類型", enumClass = CustomerType.class)
private Integer type;
4.Patch請求和Put請求應使用x-www-form-urlencoded方式傳遞參數
在使用Patch和put請求時,body中的請求參數方式要改爲x-www-form-urlencoded。
5.SQL常用函數
- IFNULL(v1,v2) 函數
如果第一個參數 爲 NULL,則返回第二個參數的備用值,其實跟CASE WHEN THEN差不多,只是更加簡潔明瞭了。 - CONCACT 用於將多個字符串連接起來,形成一個單一的字符串。
- CASE WHEN THEN ELSE THEN END CASE 表示函數開始,WHEN THEN 表示條件成立後做什麼,END 表示函數結束
6.@NotEmpty、@NotBlank、@NotNull
平時我們一般會在DTO的入參上使用validate的註解,這三種算是比較常見的吧。
-
@NotEmpty 用在集合類上面
用@NotEmpty修飾的String類、Collection、Map、數組,是不能爲null或者長度爲0的(String Collection Map的isEmpty()方法) -
@NotBlank只用於String,不能爲null且trim()之後size>0
-
@NotNull:不能爲null,但可以爲empty,沒有Size的約束
7. Maven依賴範圍
Maven有以下幾種依賴範圍:
- compile:編譯依賴範圍,使用此依賴範圍對於編譯、測試、運行三種classpath都有效,即在編譯、測試和運行時都要使用該依賴jar包;
- test:測試依賴範圍,只對測試有效,表明只在測試的時候需要,在編譯和運行時將無法使用該類依賴,如 junit;
- provided:已提供依賴範圍。編譯和測試有效,運行無效。如servlet-api,在項目運行時,tomcat等容器已經提供,無需Maven重複引入;
- runtime:運行時依賴範圍。測試和運行有效,編譯無效。如 jdbc 驅動實現,編譯時只需接口,測試或運行時才需要具體的 jdbc 驅動實現;
- system:系統依賴範圍,使用system範圍的依賴時必須通過systemPath元素顯示地指定依賴文件的路徑,不依賴Maven倉庫解析。
在默認依賴範圍的情況下,傳遞性依賴也是有條件的。
- 當第二直接依賴爲compile時,則依賴關係以第一直接依賴爲準;
- 當第二直接依賴爲test時,則沒有依賴關係;
- 當第二直接依賴爲provided時,只有第一直接依賴也爲provided時纔有provided範圍的依賴關係;
- 當第二直接依賴爲runtime時,除了第一直接依賴關係爲compile時依賴範圍爲runtime,其他三種皆與第一直接依賴範圍相同。
依賴衝突的調節:
A -> B -> C -> X (1.0)
A -> D -> X (2.0)
由於只能引入一個版本的包 , 此時 Maven 按照最短路徑選擇導入 X (2.0)
A -> B -> X (1.0)
A -> D -> X (2.0)
路徑長度一致 , 則優先選擇第一個 , 此時導入 X (1.0)