java接口和工具类区别,【深度精讲】JFinal中的Ret和Kv工具类的区别,你用对了吗?...

在JFinal中有两个类Map的工具类,一个是有状态的Ret,一个是无状态的Kv,各种自己的应用场景,你用对了吗?

37acb444f5b2634f36e4cb886fcfa155.png

下面我们从多个方面来探究一下,JFinal针对这两个类的设计:

一、位置-com.jfinal.kit包

72b686610ab7dad41f95e189eb2f8634.png

com.jfinal.kit包,JFinal里的核心工具类包,里面还有我们常用来判断和处理字符串用的StrKit工具类。加载读取配置文件用的PropKit工具类。用户密码Md5或者加盐加密用的HashKit工具类等。

总之,这个工具类包下面都是我们日常开发中常用的.(不接受反驳 (#^.^#))

二、Kv.java详解

73051a05e55c19db07a2bf930af8db25.png

Kv继承HashMap,拥有HashMap的所有特性,你可以把Kv.java当做一个更好用的HashMap。

场景使用:主要用来做参数,传递参数

ee9735f699ea042dffb7ef7afb8e3d0d.png

例1、下面来看一个Service里封装的例子:

704110c55342f12be32ae2f5f308b21f.png

这是Service中封装的一个根据关联类型和关联对象ID 删除符合条件数据的一个数据库操作。这里用Kv来构造了删除使用的参数,是deleteBy(Kv params)这个方法的参数。

例2、再来看一个JFinal微信开发中 对微信API的一个封装:

de5ed3dee3fd155e1add31392cc11c61.png

这个场景下,使用Kv包装作为接口的参数,去调用微信API。

例3、在Controller层 使用Kv把前端传递的参数封装起来,更方便的调用非结构化参数,非Bean,非Model的参数传递

12dbf3fa98d08ce2e011d55e4c7a26a8.png

Controller.java中默认提供了getKv()这个方法,如果前端传递的参数是一个Model,比如参数是user.id=1 user.name="张三"此时我们后端可以使用getModel(User.class,"user")去获取一个用model包装的参数集合。如下图案例所示:

这里需要注意的是modelName.attrName这种形式,使用的attrName必须与数据表字段名完全一样。

b18972d03dd29ea25845a469157940c8.png

如果传递的参数与Model不同,但是也是user.id这种形式的参数,一般我们后端可以封装一个JavaBean,然后使用getBean(MyBean.class,"user")也可以得到一组bean封装的参数集合。如下图所示:

3d92fc620e0aa02372df4f91400ccf8c.png

注意:getBean方法用于支持传统Java Bean,包括支持使用jfinal生成器生成了getter、setter方法的Model,页面表单传参时使用与setter方法相一致的attrName,而非数据表字段名

除了以上两种情况,如果前端一个表单提交的数据,表单没有设置域,直接传递的零散的表单项和值,则可以使用getKv()拿到所有前端提交过来的参数,按照HashMap的形式包装起来,方便后面使用。

其实:如果希望传参时避免使用modelName前缀,可以使用空串作为modelName来实现:getModel(User.class, ""); 这对开发纯API项目非常有用。

但是这里我们主要来探究Kv的方式:

19802343a6463c6848c75eb3bc256558.png

Kv里提供了很多快速参数转型的方法:在Service里可以快速根据参数的名字作为Kv里的Key获取转型数据值。

be16dd5bc0b93f6972ab15c2c12391f2.png

在Service里 我们可以使用这些方法,拿到我们需要的参数值。

e1db28fcc65b54bb588ed25021519bd8.png

特别注意:上面这个案例还能看出一个Ret和Kv的区别,就是一个主要作为参数,一个主要作为返回值。

三、Ret.java详解

81a6f864649a058a7f92dd606eba1113.png

从上图可以看出,Ret和Kv一样 都是继承了HashMap,是一个更好用的HashMap,唯一不同的是加入了状态state,主要是用来做返回值,用来返回操作处理的数据和状态的。也用于服务器对客户端请求响应JSon数据通讯。

38ce2c2c786a488862eb3cf27bafb1dc.png

例1、Service层操作返回值,标明返回的数据、状态信息。

c7d46fcf3fa65b2cdd931a08dd3b19e0.png

这里我列举一个更新密码的例子,拿到原密码和新密码之后做完判断和更新后,根据最后执行是否成功,返回一个Ret值,或者是success或者是error,这里具体看看封装的Ret是这样的:

b545435cf5bfe5d41e385273360276c5.png

调用了Ret里的fail和ok方法,设置了success和error分别对应的两个状态。

58c4bd701724032ede2ff4f0b10c18e4.png

最后会设置这个状态名字是state值要么是ok要么是fail

e08126ed1fd923b0ee8e3031a526093a.png

那么,我们Controller层拿到这个service的返回值,如果前端是Ajax请求或者是作为API接口,用JSON数据格式通讯的话,可以直接使用renderJson(ret)了。

959c30261b96932ccc216e4206a292d1.png

总结:这个就是Ret作为Service返回值和服务器与客户端做JSON数据通讯,返回的Json数据的典型应用场景,跟Kv还是有区别的,就只在这个状态上。

希望,这个对比试验可以让大家清晰的认识同样继承了HashMap的两个工具类,在应用场景上的区别,用对JFinal,用好JFinal。

如果您对次图文教程有任何意见和改进建议,请一定关注JFinal学院公众号:jfinalxueyuan留言告诉我们。

如果您在本文中有所收获,想关注更多JFinal课程,也请一定关注JFinal学院公众号:jfinalxueyuan,更多精彩课程,等着你。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值