目錄
- git
- 本地回滾到到`120bc409ee3b8f63a23d0060e55118bcce557acf`提交記錄
- 本地提交到已有代碼分支
- IDEA
- 批量導入快捷鍵無效
- 更換背景主題
- 快捷鍵
- 快捷鍵可以設置eclipse模式,但是有些不生效,可能是沖突了
- `Ctrl+單擊`,`Eclipse`里面是可以跳轉到代碼內部;`IDEA`是跳轉到引用該方法的地方(`Ctrl + Alt +B`是跳轉到方法內部)
- 格式化代碼快捷鍵:`Ctrl+Alt+L`
- 轉換大小寫:`Ctrl+Shift+Y`(*eclipse*)或者`Ctrl+Shift+U`
- 下劃線轉駝峰的用插件 `CamelCase`,快捷鍵是 `Shift + Alt + U`
- 在這里插入圖片描述
- 外部修改了文件名稱,類內部名稱需要修改,進入類內部,點擊`Alt + Enter`,可以選擇改成和外部名稱一致,或者外部名稱改成和內部一致
- `Ctrl+E`查看最近打開文件記錄列表
- Alt + 箭頭左右 (回到之前操作的文件)
- 設置打開代碼窗口無上限
- Ctrl+Shift+O去除無用import,變成了導入.*,導致checkstyle不通過
- java
- org.springframework.util.ReflectionUtils
- 比對相同實體的屬性值是否相同
- 源碼
git
本地回滾到到120bc409ee3b8f63a23d0060e55118bcce557acf
提交記錄
git reset --hard 120bc409ee3b8f63a23d0060e55118bcce557acf
強制推送到遠程倉庫,廢棄掉之前的提交(這樣做可能會改變其他人已經拉取的分支):
git push origin --force --all
本地提交到已有代碼分支
在您本地對直接導入并解壓縮的代碼文件進行修改后,要同步到下載的Git代碼分支上,可以按照以下步驟操作:
-
首先確保你已經在本地的這個項目文件夾下初始化了Git倉庫,并且已經關聯到遠程的GitHub倉庫。如果沒有,請執行以下命令:
cd 你的項目文件夾路徑 git init git remote add origin 遠程倉庫地址
-
將修改的文件添加到暫存區:
git add .
這里
.
代表所有修改過的文件,如果你只想添加特定文件,可以用git add 文件名
。 -
提交本地更改:
git commit -m "你的提交描述信息"
-
推送到對應的遠程分支(假設是master分支):
git push origin master
-
如果遠程分支不是master,比如是dev分支,則改為:
git push origin dev
-
如果在推送時遇到權限問題或者需要推送到一個新分支,可能需要使用
-u
參數創建與遠程分支的追蹤關系,以及-f
參數強制推送:git push -u origin 新分支名稱 -f
請謹慎使用
-f
參數,因為它會覆蓋遠程分支上的內容。
IDEA
批量導入快捷鍵無效
Alt+Enter
,批量導入類無效,可以嘗試打開下面開關
更換背景主題
快捷鍵
快捷鍵可以設置eclipse模式,但是有些不生效,可能是沖突了
Ctrl+單擊
,Eclipse
里面是可以跳轉到代碼內部;IDEA
是跳轉到引用該方法的地方(Ctrl + Alt +B
是跳轉到方法內部)
格式化代碼快捷鍵:Ctrl+Alt+L
轉換大小寫:Ctrl+Shift+Y
(eclipse)或者Ctrl+Shift+U
下劃線轉駝峰的用插件 CamelCase
,快捷鍵是 Shift + Alt + U
外部修改了文件名稱,類內部名稱需要修改,進入類內部,點擊Alt + Enter
,可以選擇改成和外部名稱一致,或者外部名稱改成和內部一致
Ctrl+E
查看最近打開文件記錄列表
Alt + 箭頭左右 (回到之前操作的文件)
設置打開代碼窗口無上限
Ctrl+Shift+O去除無用import,變成了導入.*,導致checkstyle不通過
通過下面設置,默認超過5個就變成導入*
java
org.springframework.util.ReflectionUtils
ReflectionUtils
是Spring
框架提供的一個工具類,主要用于簡化Java
反射相關的操作。這個類包含了多個靜態方法,可以幫助開發者在運行時執行一些常見的反射任務,比如:
- 獲取和設置私有字段的值:無論字段是否為私有,都可以通過 ReflectionUtils 訪問其值。
- 調用方法:包括私有方法在內的任意方法都可以通過 ReflectionUtils 被安全地調用。
- 檢查類、接口、方法和字段是否存在:輔助進行類結構的探測。
- 遍歷類層次結構:遞歸查找父類或接口上的方法和字段。
- 設置訪問權限:通過
makeAccessible()
方法臨時改變訪問控制,使得原本不可見的成員變為可見。- 處理異常:對于可能出現的反射異常進行了封裝和統一處理。
- 獲取所有字段:不論繼承層次深淺,都能獲取到類的所有字段。
通過使用
ReflectionUtils
,開發者可以減少手動編寫反射代碼的復雜度,降低潛在的錯誤風險,并使代碼更具可讀性和可維護性。在Spring
框架中,這個工具類廣泛應用在依賴注入、AOP
代理、事件處理等方面。
使用場景就是表里面code
、value
字段存放的是屬性名稱、屬性值,現在就是把表數據和具體實體做個映射,給實體屬性set
值(慚愧,作為一個老程序員,第一次用這個工具類,特此記錄一下)
- 設置屬性值
- 具體方法
public static void setProperty(Object target, String propertyName, Object value) {Field field = ReflectionUtils.findField(target.getClass(), propertyName);if (field != null) {ReflectionUtils.makeAccessible(field);try {field.set(target, value);} catch (IllegalAccessException e) {throw new RuntimeException("無法設置屬性值", e);}} else {throw new IllegalArgumentException("找不到名為 " + propertyName + " 的屬性");}}
比對相同實體的屬性值是否相同
源碼
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;/*** 比較實體,返回相同和不同的屬性*/
public class EntityCompareTest {private static Map<String, Object> differences = new HashMap<>(); // 用于存儲不同屬性及其新舊值private static Map<String, Object> unchanges = new HashMap<>(); // 用于存儲值未發生改變的屬性及值public static void main(String[] args) throws IllegalAccessException {DemoEntity leftEntity = new DemoEntity();leftEntity.setAge(32);leftEntity.setId(20240229L);leftEntity.setName("Tom");leftEntity.setSex(1);DemoEntity rightEntity = new DemoEntity();rightEntity.setAge(31);rightEntity.setId(20240229L);rightEntity.setName("July");rightEntity.setSex(2);Class<?> leftClass = leftEntity.getClass();Class<?> rightClass = rightEntity.getClass();if (!leftClass.equals(rightClass)) {throw new IllegalArgumentException("Entities must be of the same type");}Field[] fields = leftClass.getDeclaredFields();for (Field field : fields) {field.setAccessible(true);Object leftValue = field.get(leftEntity);Object rightValue = field.get(rightEntity);if (leftValue == null && rightValue != null) {differences.put(String.valueOf(field), new ComPareValue<>(leftValue, rightValue));} else if (leftValue != null && !leftValue.equals(rightValue)) {differences.put(field.getName(), new ComPareValue<>(leftValue, rightValue));} else {unchanges.put(field.getName(), leftValue);}}System.out.println("變更信息:" + differences.toString());System.out.println("未變更信息:" + unchanges.toString());}
}
import lombok.Data;/*** demo實體類*/
@Data
public class DemoEntity {private Long id;private String name;private Integer sex;private Integer age;
}
import lombok.Data;/*** 存儲差異值.** @param <L>* @param <R>*/
@Data
public class ComPareValue<L, R> {private L left;private R right;public ComPareValue(L left, R right) {this.left = left;this.right = right;}}