Model Containers
模型容器(Model Containers
)是实际Model
类的一种镜像。对于从一个Map、JSON字符串或其他数据转换得到的Model
对象,模型容器会在性能上对其进行优化:保存数据时并不会保存Model
对象而是直接保存其来源数据本身,因为去掉了转换这一层,效率会很高。
但请注意它的一些限制:
- 它们必须引用在相同数据库中已定义的数据表
Model
。 - 你无法对它们使用
SELECT
操作,因为它们并不是一个已存在的表,只是提供了一些方便的方法使它们看起来像一个Model
。 - 请确保被引用的表是正确的,因为它本身无法辨别表是否正确。
- 对于JSON/Map/Object,它并不是一个全功能的语法分析器,它只是一个简单、好用的数据容器。
有趣的特性:
- 使用
ForeignKeyContainer
能让外键拥有懒加载 lazy-loading的特性 - 通过继承或实现
ModelContainer
,你可以定义你自己的模型容器。 - 列可以指定
@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()
方法发起实际检索。