必威体育Betway必威体育官网
当前位置:首页 > IT技术

Guns第八节MAP+WARPPER详解

时间:2019-10-02 19:14:22来源:IT技术作者:seo实验室小编阅读:50次「手机版」
 

warp

下面介绍一下guns controller层map+warpper的访问方式。

首先说一下这个map,map就是把controller层的访问结果转化成map.然后warpper就是把这个map进行一次包装,可以往里面加一些字段,可以修改一些字段,也可以删除一些字段,这样做有什么好处呢?举个例子,比如说现在controller层返回一个user对象,然后这个对象里面有三个字段,并且sex是一个数字,比如说 1 男或者 2女.因为往往我们插入数据库之后,数据库里面记载的字段是一个数字。所以说返回结果可能是一个数字 1 或者 2.

然后为什么要用map呢,设想一下,假设用map返回的话,我们是不是可以在这些属性里面任意添加其他的属性,比如说添加一个sexName,把这个 1 或者 2 转化成文字形式,这样的形式有什么好处呢,减少了跟前端交互的成本,比如说你直接返回一个user,你必须告诉前段工程师 1是男,2 是女。 但是如果我们在查出之后,自己返回了一个,直接把sex转化成文字,这样就减少了跟前端交互的成本。然后Map还可以很方便的扩张一些其他的字段,比如说,只需要就行了。如果你返回的是一个user对象,你肯定不可能动态的拓展其他的字段,你必须修改源代码,修改user对象的代码,而map的话,你直接map.put()就可以了,这样子的好处就是可维护性高,

比如说某一个controller它某一天想加一个字段,你不需要改变user的代码,你只需要在map里面增加一个字段或者修改某个字段,这样就不容易出现错误。

然后看一下他的原理

这个object存的就是Map对象或者list对象,他有一个构造函数,构造函数需要把Object对象传过来。然后有一个warpper方法,首先判断他是一个list还是一个map,如果是list的话,循环遍历这个list,把这个map对象分别包装了一下,包装就是这个方法,,如果是map对象,就直接包装一下map对象,之后返回这个被包装之后的这个对象。这个需要子类去实例化它的,需要子类重写它的,这个子类就是需要包装哪些对象,比如说user里面有个sex,还需要在user里面写其他的字段都是在这个方法里面重写它的内容

,通过BaseControllerWarpper类的子类介绍一下warpper类有什么作用

初始化的时候需要传一个对象,然后重写warpTheMap,这个map就是原有的返回结果。这个里面的内容就是包装的过程,最后把它包装成一个什么样的结果。大家可以看到取出来一个pid,pid就是一个部门列表的父id,就是把上级部门的id取出来,然后判断是不是为空,如果为空的话,我们把父级部门的名称pName改成--。如果不是的话,取出这个父级名称,通过这个父级id(pid)取出这个父级名称。大家可以看到直接把pid改成了文字名称,这样就方便把数字的内容改成文字的内容,直接告诉前段,它的父级名称是什么?

这个父级名称没有显示出来,大家可以看到json,json是经过包装了的,最顶级的公司的父级名称是“--”,大家可以看到,在没有父级id的情况下,很方便的将父级名称变成"--"。有父级id的情况下,通过父级id(pid)得到父级名称。

比如说字典的包装类,首先获取到字典的id,然后通过字典的id找到下标所有的字典,这是什么意思呢。

比如说状态这个字典,状态只是一个名称,它的值都有哪些?他是通过id,pid是16的话,他就会找到这个字典的这几条,找到pid是16的这两条记录,他就是状态对应的枚举,是启用还是禁用。找到字典之后,遍历这个字典,,把字典的序号和字典的名称通过";"":"连接起来。

如果不作包装的话,你需要返回给前台,number还有名称就需要前台包装了,

前端进行包装,当你进行修改的时候,比如说样式不是这样了,你就需要告诉前端通过那些字段在前端组装这些东西。但是如果你后端控制的话,你可以直接写这样一个warpper类而不用告诉前端,减少了一个交流的成本,并且把这些内容的显示权限都交给后端处理。由后端来控制,这样比较好控制.

日志报表的一个包装类,其实这个作用就是把massage进行了一个包装。

是一个用户id

Controller类怎么写

如果你要包装已有的业务的一个对象返回形式不是map而是普通的,你可以这样做

你写的这个包装类必须是,如果是其他的话,他会不做处理。

把数字信息转化为文字信息,是单例的,每次调用通过这个,它是在Spring容器中的.

大家知道如果想调用springbean的话,一种形式就是注入,但是如果它不是spring容器里面的对象,就不能用这种方式,可以通过,拿到这个context,context可以直接get这个bean,就可以直接用静态方法调用的方式调用这个spring容器中的bean,constantFactory就是通过这种方式

,它每次调用的时候通过这个me()方法,调用这个getBean。从而可以使用这些方法

基本上是通过数字的id得到它相应的名称,这个类用起来非常方便,基本上是通过这个

可以看到这个是静态方法,直接这个里面有些可以直接操作数据库的,直接操作dict,直接从字典里面得到这个性别。这些就是constantfactory的作用。

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读