数据模型
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
用于表示 String
、Number
、Boolean
、Null
四种基本类型数据。
满足条件 | 表示的类型 | 获取对应值 |
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 中定义的函数。例如:下面例子
- var foo = ()-> { return 123; }
- return foo;
提示
需要提示的是通过 UdfModel
形式调用 Udf 的返回值得到的将会是 DataModel
类型结果。