Foxnic-Web 代码生成 (4) —— shadow 方法的应用

LeeFJ
• 阅读 613

Foxnic-Web 代码生成 (4) —— shadow 方法的应用

  本文探讨的是在 FoxnicWeb 实体模型生成时,配置枚举属性与逻辑值属性。

配置枚举属性映射

  通过 shadow 方法为属性对应枚举,并同步生成get、set 方法。

  例如,在 bpm_process_definition_node 表的 node_type(节点类型) 字段,节点类型可选值包括: StartEvent、UserTask、SequenceFlow、EndEvent。那么可以先将他们定义为枚举,如下所示:

/**

  • Camunda 流程节点类型

  • */ public enum CamundaNodeType implements CodeTextEnum {

    START_NODE("起始节点","StartEvent"), USER_TASK("人工任务","UserTask"), SEQUENCE_FLOW("单一流向","SequenceFlow"), /**

    • 不涉及,跳过审批
    • */ END_EVENT("结束节点","EndEvent");

    private String text; private String code; private CamundaNodeType(String text,String code) { this.text=text; this.code=code; }

    public String code() { return this.code; }

    public String text() { return text; }

    public static CamundaNodeType parseByCode(String code) { return (CamundaNodeType) EnumUtil.parseByCode(CamundaNodeType.values(),code); }

}

  在配置模型生成的代码中加入 shandow 方法配置,如下所示:

@Override public void configModel(PoClassFile poType, VoClassFile voType) { voType.addSimpleProperty(String.class,"assigneeInfo","选择的审批人信息","选择的审批人信息"); poType.addListProperty(ProcessDefinitionNodeAssignee.class,"assignees","审批人清单","审批人清单"); // 将属性映射为枚举,将 bpm_process_definition_node 的 node_type 射为 CamundaNodeType 枚举类型 poType.shadow(BPM_PROCESS_DEFINITION_NODE.NODE_TYPE, CamundaNodeType.class); }

生成的实体代码入下,nodeType属性多了两个枚举类型的get、set 方法,此时 getNodeType 与 getNodeTypeEnum 的效果是一样的,只是返回值类型不同;setNodeType 与 setNodeTypeEnum 方法的效果也是一样 的,只是入参不同。 Foxnic-Web 代码生成 (4) —— shadow 方法的应用 在使用实体对象时,可以这样写代码:

ProcessDefinitionNode sample = new ProcessDefinitionNode(); // 可以这样设置值,设置枚举值,不必设置字符串值 sample.setNodeTypeEnum(CamundaNodeType.END_EVENT); // 可以这样获取值,并比较,不必在用字符串做比较 if(sample.getNodeTypeEnum()==CamundaNodeType.START_NODE) { //_TODO 做你想做的 _}

配置逻辑属性映射

  通过 shadowBoolean 方法为属性对应为逻辑值,并同步生成 isXXX、setXXX 方法。

  例如,在 BPM_PROCESS_DEFINITION_FILE 表中有个 ACTIVATED(是否激活) 字段,在实体代码生成时,可以做如下配置:

public void configModel(PoClassFile poType, VoClassFile voType) { poType.addSimpleProperty(User.class,"lastUpdateUser","最后修改人","最后修改人"); // 映射逻辑值 poType.shadowBoolean(BPM_PROCESS_DEFINITION_FILE.ACTIVATED); poType.addListProperty(ProcessDefinitionNode.class,"nodes","审批节点清单","审批节点清单"); }

  生成实体类方法如下,此时的 getActivated 和 isActivated 等价,只是返回的值类型不同;setActivated 方法做了重载,传入不同类型的值。 Foxnic-Web 代码生成 (4) —— shadow 方法的应用 至于在 setActivated(Boolean activatedBool) 这个方法逻辑值对应的是 1/0 还是 T/F 或 Yes/No 可以在 DBTreaty 中定义,每个DAO对应一个 DBTreaty ,配置数据库规约。代码片段如下:

DBTreaty dbTreaty=new DBTreaty(); // 设置 false 对应的数据库值 dbTreaty.setFalseValue(0); // 设置 true 对应的数据库值 dbTreaty.setTrueValue(1);

  在使用实体对象时,可以这样写代码:

ProcessDefinitionFile sample = new ProcessDefinitionFile(); // 值接设置逻辑值,而非具体数据库要存储的值,底层负责转换 sample.setActivated(true); // 获取值,并比较,最层自行转换为逻辑值 if(sample.isActivated()) { // _TODO 做你想做的 _}

总结

  shandow方法和shandowBoolean方法的目的就是避免直接的值比较,把属性处理成等价的枚举和逻辑值,代码更加简洁。

相关项目

  https://gitee.com/LeeFJ/foxnic
  https://gitee.com/LeeFJ/foxnic-web
  https://gitee.com/lank/eam
  https://gitee.com/LeeFJ/foxnic-samples

官方文档

  http://foxnicweb.com/docs/doc.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Python+Selenium自动化篇
本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子。0.元素定位方法主要有:id定位:find\_element\_by\_id('')name定位:find\_element\_by\_name('')class定位:find\_element\_by\_class\_name(''
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Jenkins 插件开发之旅:两天内从 idea 到发布(上篇)
本文首发于:Jenkins中文社区(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fjenkinszh.cn)!huashan(https://oscimg.oschina.net/oscnet/f499d5b4f76f20cf0bce2a00af236d10265.jpg)
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_