gpt4 book ai didi

java - 查询单列并返回值的集合而不是复杂的对象

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:56 25 4
gpt4 key购买 nike

我正在学习使用 ORMLite。我有一个特定的用例,我不确定我正在寻找的功能是否存在于 ORMLite 中,或者我是否需要自己编写一些额外的代码。

这是一个基于 ORMLite 文档的示例。该文档使用 Account 对象,我可以执行返回某种 Collection 的各种查询:

// get our query builder from the DAO
QueryBuilder<Account, String> queryBuilder = accountDao.queryBuilder();
// the 'password' field must be equal to "qwerty"
queryBuilder.where().eq(Account.PASSWORD_FIELD_NAME, "qwerty");
// prepare our sql statement
PreparedQuery<Account> preparedQuery = queryBuilder.prepare();
// query for all accounts that have "qwerty" as a password
List<Account> accountList = accountDao.query(preparedQuery);

对于我的情况,我只对帐户中的单个列感兴趣 - 让我们假设它是“密码”列。该文档显示了如何使用 selectColumns(String... columns)方法仅选择我想要的列。

selectColumns(String... columns)

Add columns to be returned by the SELECT query and set on any resulting objects. If no columns are selected then all columns are returned by default. For classes with id columns, the id column is added to the select list automagically. All fields not selected in the object with be their default values (null, 0, false, etc.).

但是此查询仍将返回 Account 对象的集合,其中几乎所有字段都包含默认值。这显然是自动垃圾收集的好处之一。由于我的密码实际上是字符串并且都可以这样解释,并且我想将此信息传递给其他真正不关心帐户是什么的类,我真正想要的是 Collection<String>而不是Collection<Account>

现在已经不是我第一天编程了,所以我自己有多种方法来解决这个问题。我可以迭代一个帐户集合并从中构建一个新的字符串集合。我目前使用的一个更以 ORMLite 为中心的解决方案是构建一个自定义 RowMapper,它获取原始结果并仅返回数组 [0] 位置中的值。

然而,这让我想知道我是否遗漏了一些东西,因为我可能不是第一个需要简单对象集合而不是复杂对象集合的人,其中除了一个字段之外的所有字段都为空。我想知道 ORMLite 是否提供了一种更简单的方法来做到这一点,但我在研究中没有发现太多。

这样就不会成为“这个答案不算数,再给我一个”游戏,我的问题本质上是ORMLite 的哪些内置功能提供了这种便利?

最佳答案

what I would really like is a Collection instead of a Collection.

因此,大多数查询都是通过 DAO 完成的,返回由 DAO 管理的实体或实体集合。但是,您当然可以使用 raw-queries with ORMLite并返回您想要的任何内容。

所以你应该能够做类似的事情:

GenericRawResults<String> rawResults = orderDao.queryRaw("SELECT qwerty FROM accounts");
for (String result : rawResults) {
System.out.println("Account qwerty field = " + result);
}
rawResults.close();

关于java - 查询单列并返回值的集合而不是复杂的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34862436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com