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

时间:2016-01-18 19:21:50

标签: java ormlite

我正在学习使用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);

对于我的案例我只对帐户中的一个列感兴趣 - 让我们假装它的密码是&#39;柱。该文档显示了如何使用selectColumns(String... columns)方法仅选择我想要的列。

selectColumns(String... columns)
     

添加SELECT查询返回的列,并在任何结果对象上设置。如果未选择任何列,则默认返回所有列。对于具有id列的类,id列会自动添加到选择列表中。未在对象中选择的所有字段都是其默认值(null,0,false等)。

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

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

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

所以这不会成为一个答案。这个答案不算数,再给我一个&#39;游戏,我的问题基本上是 ORMLite的内置功能提供了这种便利吗?

1 个答案:

答案 0 :(得分:0)

  

我真正喜欢的是Collection而不是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();