数据模型

DataQL 的数据模型是通过 net.hasor.dataql.domain.DataModel 接口表示的,共计有4个实现类。其中:String、Number、Boolean、Null 四个类型同时使用 ValueModel 来表示。

由于 DataQL 在进行数据处理和转换期间所有数据操作都会在统一的数据模型上进行处理,因此 DataModel 也是 DataQL 的一项核心概念。

API 文档参考手册地址为:[net.hasor.dataql.domain]

DataModel

DataModel 是一个接口,可以表示任意 DataQL 查询的返回值。根据实际情况可以将其强制转换成下列任一类型:

满足条件 可强转的类型
isValue() == true ValueModel
isList() == true ListModel
isObject() == true ObjectModel
isUdf() == true UdfModel

还有一个非常重要的 unwrap 方法,这个方法是用来解除数据对象 DataModel 形态的封装,直接变为 Map/List 结构。

但是需要注意 unwrap 方法对于 UdfModel 类型解开的结果会是一个 Udf 接口。

ValueModel

用于表示 StringNumberBooleanNull 四种基本类型数据。

满足条件 表示的类型 获取对应值
isNull() == true Null asOri()
isNumber() == true Number asNumber()
isBoolean() == true Boolean asBoolean()
isString() == true String asString()

对于 Number 类型数据还可以进一步使用下列方法,来获取更加精确的类型值。

满足条件 表示的类型 获取对应值
isByte() == true byte asByte()
isShort() == true short asShort()
isInt() == true int asInt()
isLong() == true long asLong()
isBigInteger() == true BigInteger asBigInteger()
isFloat() == true float asFloat()
isDouble() == true double asDouble()
isBigDecimal() == true BigDecimal asBigDecimal()

ListModel

表示一个列表或集合的数据,相比较 DataModel 多了一组根据元素位置判断对应类型的接口方法。

满足条件 表示的类型 获取对应值
isValue(int) == true ValueModel getValue(int)
isList(int) == true ListModel getList(int)
isObject(int) == true ObjectModel getObject(int)
isUdf(int) == true UdfModel getUdf(int)

ObjectModel

表示一个列表或集合的数据,相比较 DataModel 多了一组根据元素Key判断对应类型的接口方法。

满足条件 表示的类型 获取对应值
isValue(str) == true ValueModel getValue(str)
isList(str) == true ListModel getList(str)
isObject(str) == true ObjectModel getObject(str)
isUdf(str) == true UdfModel getUdf(str)

UdfModel

当 DataQL 查询返回一个 Udf 函数或者 Lambda 函数时,就会得到一个 UdfModel。而它事实上就是一个 Udf

通过 UdfModel 允许我们在程序中调用 DataQL 中定义的函数。例如:下面例子

  1. var foo = ()-> { return 123; }
  2. return foo;

提示

需要提示的是通过 UdfModel 形式调用 Udf 的返回值得到的将会是 DataModel 类型结果。