Foxnic-Web 代码生成 (3) —— 配置模型

LeeFJ
• 阅读 404
Foxnic-Web 代码生成 (3) —— 配置模型
概述

  Foxnic-Web 对模型体系进行了简化,默认创建 PO 和 VO 类,且 VO 继承自 PO。其它代码基于 PO 和 VO 实现。当然开发者也可以按需自定义模型,但自定义模型并不建议手动创建,而是通过代码生成工具进行创建。

  代码生成配置类的 configModel 方法将全部的模型配置集中于此,方便站在全局的高度理解与分析模型。开发者不必关心新建的模型应该放在哪个包下面,这些在代码生成配置上都已经定义,无需时时关注。

  另外,由代码生成的模型有其规范和默认已经实现的方法,方便开发者的同时,也提高模型转换、克隆复制的性能。

  本文中的示例代码均可在 https://gitee.com/LeeFJ/foxnic-samples 项目中找到,本文对照 webfull 项目讲解

调整 PO、VO 模型

  PO 源自数据表,它的字段和表字段一致,VO 继承 PO 主要用于传递请求参数,所以增加了一些默认字段。PO 是用于数据持久化,但也可以为其添加额外的字段,DAO 在保存 PO 时会自行判断,非表字段会被忽略。

  代码生成配置类的 configModel 方法默认会传入 PO、VO 类的配置文件,开发者可以为其添加额外的属性。PO 上通常会添加关联的对象,VO 上则更多的会添加出入参数。、

  当然,也可以通过 shandow 方法配置属性映射到枚举或逻辑值,这样后期编写的代码会更加简洁。关于 shandow 方法请阅读 https://juejin.cn/post/7170959223734894606 一文。

  下面是 configModel 的示例:

/**
* 配置模型,为 po 和 vo 添加 额外的属性等
*/
@Override
public void configModel(PoClassFile poType, VoClassFile voType) {
    // 1、为 po 添加属性
    poType.addSimpleProperty(Integer.class, "orderCount", "订单量", "每年收到的订单数量");
    poType.addListProperty(Goods.class,"goodsList","订单明细商品","订单明细商品");
    poType.addListProperty(OrderItem.class,"itemList","订单明细","订单明细");
    poType.addListProperty(Order.class,"orderList","订单","订单");
    // 2、为 vo 添加属性
    voType.addSimpleProperty(String.class, "keyword", "关键字", "查询关键字");
}

  需要特别说明的是,如若配置了关联字段且查询时需要填充值,则需要配置关联关系并完成 join,这方面的内容请参考 https://juejin.cn/post/7184627010419818553 。在 PO 保存时,扩展字段并不会自动保存(哪怕是配置了关联关系),它需要手动编写代码保存。因为扩展数据保存可能存在业务逻辑,DAO 无法处理这些,开发人员按需保存是一个妥当的选择。

增加新模型

  PO、VO 类的代码是默认生成的,除此之外可能还需要其它模型的支持,Foxnic 的代码生成支持额外模型的生成,并且支持模型间的继承关系。示例如下:

/**
* 配置模型,为 po 和 vo 添加 额外的属性等
*/
@Override
public void configModel(PoClassFile poType, VoClassFile voType) {

    // 3、单独创建一个 Model
    PojoClassFile addressModel = context.createPojo("AddressModel");
    // 使继承自 Entity
    addressModel.setSuperType(Entity.class);
    // 添加一个自定义属性
    addressModel.addSimpleProperty(String.class, "myProperty", "自定义属性", "我的自定义属性");
    // 使用字段构建器构建
    FieldsBuilder fields = this.createFieldsBuilder();
    fields.addAll().removeDBTreatyFields();
    // 添加字段构建器作为字段构建的来源
    addressModel.addSimpleProperties(fields);

    // 4、定义一个子类型
    PojoClassFile addressSubModel = context.createPojo("AddressSubModel");
    addressSubModel.setSuperTypeFile(addressModel);
    addressSubModel.addSimpleProperty(String.class, "postCode1", "邮编1", "邮编1");
    addressSubModel.addSimpleProperty(String.class, "postCode2", "邮编2", "邮编2");

    // 5、定义一个没有父类的对象模型
    PojoClassFile addressPureModel = context.createPojo("AddressPureModel");
    addressPureModel.noSuperType();
    fields = this.createFieldsBuilder();
    fields.addAll().removeDBTreatyFields();
    addressPureModel.addSimpleProperties(fields);
}

  通过代码生成创建模型好处多多,本文概述部分已经提及,重要的事情还是多说几遍 :) 。

小结

  本节主要介绍了在 Foxnic-SQL 和 Foxnic-Web 代码生成时如何配置 PO、VO 类型,以及如何配置自定义模型。建议大家在模型生成后,阅读生成的代码,以便深入了解模型特性。后面,我们也会安排具体章节讲解模型结构。

相关项目

  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

点赞
收藏
评论区
推荐文章
低代码开发平台 | 低代码的衍生历程、优势及未来趋势
通过简单的拖拉拽操作,而不用编写复杂的代码,实现少写代码或者不写代码,就能快速高效完成业务目标。低代码平台演进1.低代码概念低代码是无需编码(0代码)或通过少量代码就可以快速生成应用程序的开发平台。通过可视化进行应用程序开发的方法,具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程序。2.低代码衍生历
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
LeeFJ LeeFJ
1年前
Foxnic-Web 代码生成 (2) —— 代码生成的配置类
上一节,我们已经讲述了代码生成的基本步骤,但是对细节部分并未展开。利用FoxnicGenerator包进行代码生成的方式是多种多样的,我们这里提到的配置类这是其中一种,例如在FoxnicEAM项目里,有很多的代码生成非使用配置类来完成的。  我们优先选择配置类讲解,显然配置类有其优势。首先,配置类按数据表隔离,一数据表一模块一个配置类。其次,在配置类内部,按配置对象的不同,分别在不同的方法内进行配置代码的编写。例如,配置模型时在configModel方法内编写配置代码,配置字段时在configFields方法内编写配置代码。  那么,代码生成的配置为什么要用Java类,而不是用Json、XML或YML呢?首先,不管是Json、XML或YML、Java,都是在编辑器敲文本。那么哪一种方式敲文本是最方便的呢,自然是Java了,因为有开发工具强大的支持。
Stella981 Stella981
2年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
2年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_