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

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

概述

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

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

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

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

调整 PO、VO 模型

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

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

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

  下面是 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/718462... 。在 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/foxni...

  https://gitee.com/lank/eam

  https://gitee.com/LeeFJ/foxni...

官方文档

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

你可能感兴趣的:(Foxnic-Web 代码生成 (3) —— 配置模型)