hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距

J2EE 码拜 10年前 (2015-04-13) 1315次浏览 0个评论

在做业务查询时候,有时候就需要一个实例对象 A ,但是有时候测试数据会有两个符合条件查询的数据存在,这时候
Object A = getSession().createQuery(hSql).uniqueResult();就会报错,
较多的还是查询一个List的列表:
List<A> a = getSession().createQuery(hSql).list();查询,
就为了查询一条数据,这样的两种语句 效率差距大吗? 

hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
10分
检索单个对象
Query和Criteria都提供了返回单个对象的方法uniqueResult().
先调用setMaxResult(1)方法,把最大检索数目设为1,在调用uniqueResult()方法。

Hx hx = (Hx)session.createQuery(“from Hx”)
            .setMaxResults(1)
            .uniqueResult();

参考
http://blog.csdn.net/sunappro/article/details/1843467

hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
你可以把 List 的两条数据看作下面的代码,对比Object a来说只是多占用了点内存,效率的问题还是要在你写的SQL中优化。

Object[] obj = {new A(), new A()};
int i = 2;
hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
引用 2 楼 huasuoworld 的回复:

你可以把 List 的两条数据看作下面的代码,对比Object a来说只是多占用了点内存,效率的问题还是要在你写的SQL中优化。

Object[] obj = {new A(), new A()};
int i = 2;

如果说并发量大了,就为了查一条数据,我使用List<A> 返回一个列表,下面的方法:
getSession().createQuery(
“from ” + objName + ” o where o.”+propertyName+”=:value”)
.setParameter(“value”, value).list();
会有影响吧?

但是我不知道数据库符合条件的是否只有一条数据,只查询单条的话 可能会报错的呀??

hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
引用 1 楼 shixitong 的回复:

检索单个对象
Query和Criteria都提供了返回单个对象的方法uniqueResult().
先调用setMaxResult(1)方法,把最大检索数目设为1,在调用uniqueResult()方法。

Hx hx = (Hx)session.createQuery(“from Hx”)
            .setMaxResults(1)
            .uniqueResult();

参考
http://blog.csdn.net/sunappro/article/details/1843467

要是我不确定数据库只有一条符合条件的数据,那不就异常了吗?要是按照主键去查询 肯定是可以的了

hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
查单条,你报错,那就查List 然后再去筛选了…效率只是在查询sql上。 一般不会有啥问题
hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
70分
createQuery这个也是个数组对象(要不然也不能转换成list),一条数据与两条数据的写入之间所消耗的时间几乎可以忽略不计,你可以用System.arraycopy去测试读写所消耗的时间,这两种都会面临高并发,但是应该是扩容或者分布去解决问题而不是这种小的细节上。
hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
如果你能保证数据库有数据的话,那么你用第一个最好,如果不能保证那么用第二个,因为不会报错…
hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
引用 5 楼 shijing266 的回复:

查单条,你报错,那就查List 然后再去筛选了…效率只是在查询sql上。 一般不会有啥问题

能给个查询列表详细的实现过程源码就好了,这个都忘的差不多了!

hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
引用 6 楼 huasuoworld 的回复:

createQuery这个也是个数组对象(要不然也不能转换成list),一条数据与两条数据的写入之间所消耗的时间几乎可以忽略不计,你可以用System.arraycopy去测试读写所消耗的时间,这两种都会面临高并发,但是应该是扩容或者分布去解决问题而不是这种小的细节上。

能给个查询列表详细的实现过程源码就好了,这个都忘的差不多了!

hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
引用 8 楼 liweifengwf 的回复:

能给个查询列表详细的实现过程源码就好了,这个都忘的差不多了!

等有空吧。现在忙


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明hibernate查询一个对象 A 和通过查询 List<A> 的效率的差距
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!