在JFinal中有兩個類Map的工具類,一個是有狀態的Ret,一個是無狀態的Kv,各類本身的應用場景,你用對了嗎?前端
下面咱們從多個方面來探究一下,JFinal針對這兩個類的設計:java
1、位置-com.jfinal.kit包數據庫
com.jfinal.kit包,JFinal裏的核心工具類包,裏面還有咱們經常使用來判斷和處理字符串用的StrKit工具類。加載讀取配置文件用的PropKit工具類。用戶密碼Md5或者加鹽加密用的HashKit工具類等。後端
總之,這個工具類包下面都是咱們平常開發中經常使用的.(不接受反駁 (#^.^#))服務器
2、Kv.java詳解微信
Kv繼承HashMap,擁有HashMap的全部特性,你能夠把Kv.java當作一個更好用的HashMap。微信開發
場景使用:主要用來作參數,傳遞參數工具
例一、下面來看一個Service裏封裝的例子:加密
這是Service中封裝的一個根據關聯類型和關聯對象ID 刪除符合條件數據的一個數據庫操做。這裏用Kv來構造了刪除使用的參數,是deleteBy(Kv params)這個方法的參數。設計
例二、再來看一個JFinal微信開發中 對微信API的一個封裝:
這個場景下,使用Kv包裝做爲接口的參數,去調用微信API。
例三、在Controller層 使用Kv把前端傳遞的參數封裝起來,更方便的調用非結構化參數,非Bean,非Model的參數傳遞
Controller.java中默認提供了getKv()這個方法,若是前端傳遞的參數是一個Model,好比參數是user.id=1 user.name="張三" 此時咱們後端可使用getModel(User.class,"user")去獲取一個用model包裝的參數集合。以下圖案例所示:
這裏須要注意的是modelName.attrName這種形式,使用的attrName必須與數據表字段名徹底同樣。
若是傳遞的參數與Model不一樣,可是也是user.id這種形式的參數,通常咱們後端能夠封裝一個JavaBean,而後使用getBean(MyBean.class,"user") 也能夠獲得一組bean封裝的參數集合。以下圖所示:
注意:getBean方法用於支持傳統Java Bean,包括支持使用jfinal生成器生成了getter、setter方法的Model,頁面表單傳參時使用與setter方法相一致的attrName,而非數據表字段名
除了以上兩種狀況,若是前端一個表單提交的數據,表單沒有設置域,直接傳遞的零散的表單項和值,則可使用getKv()拿到全部前端提交過來的參數,按照HashMap的形式包裝起來,方便後面使用。
其實:若是但願傳參時避免使用modelName前綴,可使用空串做爲modelName來實現:getModel(User.class, ""); 這對開發純API項目很是有用。
可是這裏咱們主要來探究Kv的方式:
Kv裏提供了不少快速參數轉型的方法:在Service裏能夠快速根據參數的名字做爲Kv裏的Key獲取轉型數據值。
在Service裏 咱們可使用這些方法,拿到咱們須要的參數值。
特別注意:上面這個案例還能看出一個Ret和Kv的區別,就是一個主要做爲參數,一個主要做爲返回值。
3、Ret.java詳解
從上圖能夠看出,Ret和Kv同樣 都是繼承了HashMap,是一個更好用的HashMap,惟一不一樣的是加入了狀態state,主要是用來作返回值,用來返回操做處理的數據和狀態的。也用於服務器對客戶端請求響應JSon數據通信。
例一、Service層操做返回值,標明返回的數據、狀態信息。
這裏我列舉一個更新密碼的例子,拿到原密碼和新密碼以後作完判斷和更新後,根據最後執行是否成功,返回一個Ret值,或者是success或者是error,這裏具體看看封裝的Ret是這樣的:
調用了Ret裏的fail和ok方法,設置了success和error分別對應的兩個狀態。
最後會設置這個狀態名字是state值要麼是ok要麼是fail
那麼,咱們Controller層拿到這個service的返回值,若是前端是Ajax請求或者是做爲API接口,用JSON數據格式通信的話,能夠直接使用renderJson(ret)了。
總結:這個就是Ret做爲Service返回值和服務器與客戶端作JSON數據通信,返回的Json數據的典型應用場景,跟Kv仍是有區別的,就只在這個狀態上。
但願,這個對比試驗可讓你們清晰的認識一樣繼承了HashMap的兩個工具類,在應用場景上的區別,用對JFinal,用好JFinal。
若是您對次圖文教程有任何意見和改進建議,請必定關注JFinal學院公衆號:jfinalxueyuan 留言告訴咱們。
若是您在本文中有所收穫,想關注更多JFinal課程,也請必定關注JFinal學院公衆號:jfinalxueyuan ,更多精彩課程,等着你。