在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 ,更多精彩课程,等着你。