Foxnic-Web代码生成(四)——影子法的应用本文讨论FoxnicWeb实体模型时枚举属性和逻辑值属性的配置生成。配置枚举属性映射,通过shadow方法枚举对应的属性,同步生成get和set方法。例如,在bpm_process_definition_node表的node_type(节点类型)字段中,节点类型的可选值包括:StartEvent、UserTask、SequenceFlow、EndEvent。那么可以先将它们定义为枚举,如下所示:UserTask"),_SEQUENCE_FLOW_("Singleflow","SequenceFlow"),/***不涉及,跳过审批**/_END_EVENT_("Endnode","EndEvent");私有字符串文本;私有字符串代码;privateCamundaNodeType(Stringtext,Stringcode){this.text=text;this.code=代码;}publicStringcode(){returnthis.code;}publicStringtext(){返回文本;}publicstaticCamundaNodeTypeparseByCode(Stringcode){return(CamundaNodeType)EnumUtil._parseByCode_(CamundaNodeType._values_(),code);}}在配置模型生成的代码中添加shhow方法配置,如下:@OverridepublicvoidconfigModel(PoClassFilepoType,VoClassFilevoType){voType.addSimpleProperty(String.class,"assigneeInfo","selectedapproverinformation","选定审批人信息&quo吨;);poType.addListProperty(ProcessDefinitionNodeAssignee.class,"assignees","ApproversList","ApproversList");//将属性映射为枚举,将bpm_process_definition_node的node_type映射为CamundaNodeType枚举类型poType。shadow(BPM_PROCESS_DEFINITION_NODE._NODE_TYPE_,CamundaNodeType.class);}下面输入生成的实体代码,nodeType属性有两个枚举类型get和set方法。此时getNodeType和getNodeTypeEnum的效果是一样的,只是返回值类型不同;setNodeType和setNodeTypeEnum方法的效果是一样的,只是输入的参数不同。使用实体对象时,可以这样写代码:ProcessDefinitionNodesample=newProcessDefinitionNode();//可以这样设置值,设置枚举值,不需要设置字符串值sample.setNodeTypeEnum(CamundaNodeType...使用shadowBool??ean方法将属性映射为逻辑值,同步生成isXXX和setXXX方法。比如BPM_PROCESS_DEFINITION_FILE表中有一个ACTIVATED(是否激活)字段,可以在生成实体代码时配置如下:publicvoidconfigModel(PoClassFilepoType,VoClassFilevoType){poType.addSimpleProperty(User.class,"lastUpdateUser","LastModifier","LastModifier");//映射逻辑值list");}生成实体类的方法如下。此时getActivated和isActivated是等价的,只是返回值类型不同;重载setActivated方法,传入不同类型的值。至于setActivated(BooleanactivatedBool)方法的逻辑值对应的是1/0还是T/F还是Yes/No,可以定义在DBTreaty,每个DAO对应一个DBTreaty,配置数据库协议。代码片段如下:DBTreatydbTreaty=newDBTreaty();//设置false对应的数据库值dbTreaty.setFalseValue(0);//设置true对应的数据库值dbTreaty.setTrueValue(1);使用实体对象时,可以这样写代码:ProcessDefinitionFilesample=newProcessDefinitionFile();//值连接设置逻辑值,而不是要存储到具体数据库中的值。底层负责转换sample.setActivated(true);//获取值并比较,底层自己转换为逻辑值if(sample.isActivated()){//_TODOdowhatyouwant}总结shandow方法和shandowBool??ean方法的目的是为了避免直接进行值比较和过程属性转化为等价的枚举和逻辑值,代码更简洁。相关项目https://gitee.com/LeeFJ/foxnichttps://gitee.com/LeeFJ/foxnic-webhttps://gitee.com/lank/eam
