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/LeeFJ/foxnic-samples