我需要实现一个DAO方法来检查表中是否存在行,并相应地返回一个布尔值。显示原始版本:
public boolean check(Integer bookId) {
logger.info(BookDAOImpl.class.getName() + ".check() method called.");
return bookId.equals(this.get(bookId).getBookId());
}
我不需要返回找到的行。
由于这仅适用于演示应用程序,我正在使用:
@Override
public boolean check(Integer bookId) {
logger.info(PersonDAOImpl.class.getName() + ".check() method called.");
try {
Book book = this.get(bookId);
return bookId.intValue() == book.getBookId().intValue();
}
catch(IndexOutOfBoundsException e) {
return false;
}
}
答案 0 :(得分:0)
只需使用带有bookId的hibernate查询数据库。如果返回任何结果集,则返回true,否则返回false。
答案 1 :(得分:0)
我猜你是想为了表现而优化支票。
让我澄清一下: 获取行有三个步骤: 1.通过网络进行方法调用/请求 2. Oracle扫描并找到匹配的行(有或没有 指数) 3.复制行数据并将其带回
与(1)和(2)相关的成本很高,而(3)的成本很小。 因此,恕我直言,尝试优化返回的数据量没有意义。
例如,如果仅需要120ms进行检查,则获取数据可能只需要125ms。 正常情况下几乎没有5%的差异。
注意: - 如果WHERE条件使用索引,(2)也会变少 昂贵 - 如果您选择50到数百列,那么找到一种方法就可以了。
建议: 除非您选择50多列,否则不要打扰。只需获取完整数据并检查resultList.size()。