接下來的筆記都會以難點與一些不常見的方法為主,一些重復的crud并不會出現哦
ThreadLocal類
ThreadLocal 并不是一個Thread,而是Thread的局部變量,它用于創建線程局部變量。
- 核心思想:每個線程都有自己獨立的變量副本。這意味著,即使多個線程使用同一個
**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ThreadLocal</font>**
對象,它們也無法看到或修改彼此的變量值。這完美地避免了多線程環境下的共享資源競爭問題,無需使用同步(synchronized)。ThreadLocal為每個線程提供單獨一份存儲空間,具有線程隔離的效果,只有在線程內才能獲取到對應的值,線程外則不能訪問。 - 簡單比喻:就像一個公司(進程)里有多個員工(線程)。公司提供了一個儲物柜(
**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ThreadLocal</font>**
對象),但這個儲物柜很神奇。每個員工用他的工卡去開這個儲物柜時,打開的都是只屬于他自己的那個小格子。員工A看不到員工B格子里的東西,反之亦然。這個公共的儲物柜(**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ThreadLocal</font>**
)只是提供了訪問各自獨立空間的“鑰匙”或“機制”。
在本項目中,當我們在新增員工的時候,需要表明是誰對新增員工進行了創建和修改,那么我們就需要拿到當前登錄用戶的Token,并對其解析,就可以得到這兩個值
先創建使用靜態工具類BaseContext實現ThreadLocal
使用BaseContext進行存儲,后續在調用時,只需在調用處使用getCurrentId()方法,便可以動態的得到當前操作的id
分頁查詢
這樣主要使用了PageHelper插件來簡化分頁代碼的開發
select * from employee后面會自動補上limit(),括號內為傳遞的參數
- 要使用的依賴:
- 員工分頁查詢的實現
時間格式化
對時間字段的顯示進行統一的規定的兩種方法:
- 在屬性上加上注解@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”),對日期進行格式化
但這種方式,需要在每個時間屬性上都要加上該注解,使用較麻煩,不能全局處理。
- 在WebMvcConfiguration中擴展SpringMVC的消息轉換器,統一對日期類型進行格式處理
自定義消息轉換器,可以對全局的變量有效,因為這是我們自己定義的配置類,會在全局生效
/*** 擴展Spring MVC框架的消息轉換器-->主要用于日期* @param converters*/
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("擴展消息轉換器...");//創建一個消息轉換器對象MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();//需要為創建的消息轉換器對象設置一個對象轉換器,對象轉換器可以將java對象序列化為json數據messageConverter.setObjectMapper(new JacksonObjectMapper());//將上面的消息轉換器對象追加到mvc框架的轉換器集合中converters.add(0, messageConverter);
}