SqlQuery 和 SqlFieldsQuery
SqlQuery and SqlFieldsQuery
好像SqlQuery只支持以select *
开头的sql?它不支持其他 sql 仅 select 某些列,例如
select id, name from person
并将列映射到相应的 POJO?
如果我使用SqlFieldQuery 来运行 sql,结果是一个List 的QueryCursor(每个List 包含一条结果记录)。但如果 sql 以 select *
开头,则此列表的内容将与字段查询不同,例如:
select id,name,age from person
对于select *
,每个List由3部分组成:
第一个元素是缓存的键
第二个元素是包含数据的pojo对象
尾部元素是每列的值。
为什么要这样设计?如果我不知道 SqlFieldsQuery 运行s 的 sql 是什么,那么我需要额外的努力来找出列表包含的内容。
SqlQuery
returns 键和值对象,而 SqlFieldsQuery
允许 select 特定字段。使用哪一个取决于您的用例。
目前select *
确实包含了预定义的_key
和_val
字段,以后会完善。但是,通常在 运行 SQL 查询时列出要获取的字段是一个好习惯(这对任何 SQL 数据库都是如此,不仅是 Ignite)。这样一来,您的代码将免受意外行为的影响,例如,如果模式发生更改。
好像SqlQuery只支持以select *
开头的sql?它不支持其他 sql 仅 select 某些列,例如
select id, name from person
并将列映射到相应的 POJO?
如果我使用SqlFieldQuery 来运行 sql,结果是一个List 的QueryCursor(每个List 包含一条结果记录)。但如果 sql 以 select *
开头,则此列表的内容将与字段查询不同,例如:
select id,name,age from person
对于select *
,每个List由3部分组成:
第一个元素是缓存的键
第二个元素是包含数据的pojo对象
尾部元素是每列的值。
为什么要这样设计?如果我不知道 SqlFieldsQuery 运行s 的 sql 是什么,那么我需要额外的努力来找出列表包含的内容。
SqlQuery
returns 键和值对象,而 SqlFieldsQuery
允许 select 特定字段。使用哪一个取决于您的用例。
目前select *
确实包含了预定义的_key
和_val
字段,以后会完善。但是,通常在 运行 SQL 查询时列出要获取的字段是一个好习惯(这对任何 SQL 数据库都是如此,不仅是 Ignite)。这样一来,您的代码将免受意外行为的影响,例如,如果模式发生更改。