Model Containers

模型容器(Model Containers)是实际Model类的一种镜像。对于从一个Map、JSON字符串或其他数据转换得到的Model对象,模型容器会在性能上对其进行优化:保存数据时并不会保存Model对象而是直接保存其来源数据本身,因为去掉了转换这一层,效率会很高。

但请注意它的一些限制:

  1. 它们必须引用在相同数据库中已定义的数据表Model
  2. 你无法对它们使用SELECT操作,因为它们并不是一个已存在的表,只是提供了一些方便的方法使它们看起来像一个Model
  3. 请确保被引用的表是正确的,因为它本身无法辨别表是否正确。
  4. 对于JSON/Map/Object,它并不是一个全功能的语法分析器,它只是一个简单、好用的数据容器。

有趣的特性:

  1. 使用ForeignKeyContainer能让外键拥有懒加载 lazy-loading的特性
  2. 通过继承或实现ModelContainer,你可以定义你自己的模型容器。
  3. 列可以指定@ContainerKey来让ModelContainer拥有与列名不同的Key名

示例

JSONModel<TestObject> jsonModel = new JSONModel<>(json, TestObject.class);

// constructs an insert or update query based on the JSON contents
jsonModel.save(false);

// deletes a model based on the JSON contents
jsonModel.delete(false);

支持的类型

MapModelContainer:将Map转换为Model一样使用 JSONModel:基于JSONObject JSONArrayModel:一个JSONModel的容器 ForeignKeyContainer:使外键对象具有懒加载特性。当当前对象被查询时并不会触发对指向对象的查询,我们可以选择任意时刻通过toModel()方法发起实际检索。