1. 程式人生 > >帶著新人學springboot的應用01(springboot+mybatis+快取 中)

帶著新人學springboot的應用01(springboot+mybatis+快取 中)

  繼續接著上一節,大家應該知道駝峰命名法吧!就是我們javabean中屬性一般命名是lastName,userName這種型別的,而資料庫中列名一般都是last_name,user_name這種的,要讓對應起來,在springboot中可以設定

  

  另外大家可以看看我們用了mybatis依賴之後,匯入了一些什麼jar包,比較關鍵的是那個autoconfigure,其實內部就跟之前我們手寫的那個starter原理差不多

 

  我們也可以用xxxCustomizer來定製功能,以上面的駝峰命名為例,就可以使用這個方式,還能配置其他的很多引數,以後碰到可以再來看看

  

  其實mybatis很多是喜歡用xml的,後期比較好優化sql,所以我們也用xml來嘗試一下

xml配置mybatis

  xml配置配置的話就比較繁瑣一點了,兩個xml,然後指定這兩個xml的位置

  首先對映檔案

 

  

  然後指定這兩個檔案的路徑(對mybatis的配置,yml中都是以mybatis開頭的),後面的使用就和前面註解版一樣了,這裡就不增加篇幅了。你們可以自己試試,我試了是沒問題的。

 

  其中,註解版和xml的mybatis是可以一起使用的,不過用起來總是感覺怪怪的,而且如果是比較大的專案sql語句要優化,你一下找註解,一下又去xml找,太不方便了,還是隻用其中一種吧!看個人習慣,其實都還行吧,不是怎麼難。

  下面就繼續說說快取

 

快取(接上一節)

  上一節最後用了兩個關於快取的註解,一個是@EnableCaching開啟註解,二是在service中方法上面用@Cacheable(cacheNames = "stu")來使用快取

  快取的很多細節就不多說了,因為說了也記不住,說幾個關鍵的地方,分別是CacheManager,Cache,Entry。

  因為做快取方面的公司有很多,做出來的快取產品也就很多。我們可以把CacheManager看作使用哪一個快取產品,Cache就是這個快取產品中的很多個小空間,Entry就是每一個小空間裡存放的很多資料(就是很多個鍵值對);

  所以我們要使用快取,那就要先確定使用哪一家公司做出來的快取產品,然後拿到其中的一個小空間並取個名字,然後將一個物件放進這個小空間裡(都說了是很多個鍵值對,我們肯定要設定一個鍵方便我們取啊);

  總結起來就是設定CacheManager(springboot預設選好了,後面我們會來自定義),給快取(小空間)取個名字,設定一個鍵(springboot也預設有生成方式,後面我們也會自定義)

  對應於java程式碼,就是下圖,所以說,#id的意思就是拿到形參中的id值,所謂key;其實只是簡單的測試,key都不用寫,只用指定快取的名字就ok了。

  

  類似@Cachable的註解有兩個:@CachePut和@CacheEvict,我們可以看看這三個註解有什麼用。(注:具體的這三個註解的屬性自行看其他的資料學習)

  @Cacheable(用於查詢):第一次查詢之後把返回結果放進快取裡,之後再呼叫此方法之前會先在快取裡去找,有就直接拿,沒有才去資料庫。

  @CachePut(用於修改和新增):先不管快取 ,每次必定呼叫這個方法之後對資料庫裡的資料修改,然後根據方法返回值去更新快取;之後別的方法去查詢,就直接去快取裡查就是最新資料;

  @CacheEvict(用於刪除):很明顯,這是在執行刪除方法刪除資料庫資料之後,也把該資料對應的快取也刪除掉(假如這個註解的屬性cacheName=“stu”,還有個allEntries=true就是刪除stu這個小空間裡的所有鍵值對),這個註解有個屬性beforeInvocation,true,在方法執行前清空快取;false,方法執行之後清空快取,這也是預設值,假如方法執行異常就不清快取

 

  這幾個註解配合起來使用的話,要注意一些東西,首先是cacheNames(和value一個效果)要一樣,然後就是鍵(不管你用什麼方法,要最後的結果一致),只有當這兩個屬性確定之後,才能在快取中確定一個鍵值對中對應的值嘛!!!

 

  兩個額外的擴充套件註解:

  第一個是@Caching:這個註解就是上面三個註解的組合註解,為了方便定製一些複雜的快取規則(其實就是上面三個註解的相互配合使用),emmmm.....現在用不到,用到再說。。。。想知道使用規則的可以自己去學習

 

  第二個是@CacheConfig:這個註解加在類上面,其實就是為了方便我們的使用,你看看上面的三個註解的屬性基本一樣,那是不是可以抽取出來呢?於是就有了這個註解(這也是框架常用手段,常規操作!),具體還有什麼屬性自己去查查啊,我就隨意一說;重點還是上面那三個註解。

 

  這一節到此為止,終於把大概的輪廓和基本的用法說完了,後面就要說一下原理了,以及快取中那三個註解的屬性的一些高階用法了(其實就是自定義一些東西,比如key的生成策略什麼的,別想太複雜),順便再說說使用redis