Hibernate面试题 --- list和iterator方法的区别
来源:互联网 发布:点歌软件 编辑:程序博客网 时间:2024/05/16 01:56
1.首先看两个例子来比较一下
(1)在用Query方法查询的时候,通过HQL语句来得到Query对象,并对Query对象进行操作,首先是用list方法获取到Query的List集合并输出
public void listQuery() {
Configuration configuration = new Configuration().configure();
SessionFactory factory = configuration.buildSessionFactory();
Session session = factory.openSession();
Query query = session.createQuery("from Customers");
List<Customers> list = query.list();
for(Customers entity:list){
System.out.println(entity.toString());
}
}
输出的结果为:
List的执行sql语句为:
Hibernate: select customers0_.id as id0_, customers0_.realName as realName0_, customers0_.pass as pass0_, customers0_.sex as sex0_, customers0_.petName as petName0_, customers0_.email as email0_, customers0_.rdate as rdate0_ from customers customers0_
cn.csdn.products.domain.Customers@5bf624
(2)通过Query得到Query的对象,并用iterator迭代器输出
public void iterateQuery(){
Configuration configuration = new Configuration().configure();
SessionFactory factory = configuration.buildSessionFactory();
Session session = factory.openSession();
Query query = session.createQuery("from Customers");
Iterator<Customers> it = query.iterate();
// 遍历出来所有的查询结果
while (it.hasNext()) {
Customers customer = it.next();
System.out.println(customer.toString());
}
}
Iterator的执行结果:
Hibernate: select customers0_.id as col_0_0_ from customers customers0_
Hibernate: select customers0_.id as id0_0_, customers0_.realName as realName0_0_, customers0_.pass as pass0_0_, customers0_.sex as sex0_0_, customers0_.petName as petName0_0_, customers0_.email as email0_0_, customers0_.rdate as rdate0_0_ from customers customers0_ where customers0_.id=?
cn.csdn.products.domain.Customers@1d13272
结论:
(1) 从上面的执行结果可以看出获取的方式不一样
List的获取方式为:
List<Customers> list = query.list();
Iterator的获取方式:
Iterator<Customers> it = query.iterate();
(2)从执行结果可以看出list输出一条语句,而iterator输出的是两条sql语句,我们可想一下,为什么会输出这样的效果?
因为他们获取数据的方式不一样,list()会直接查询数据库,iterator()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1次
(3)list只查询一级缓存,而iterator会从二级缓存中查
(4)list方法返回的对象都是实体对象,而iterator返回的是代理对象
- Hibernate面试题 --- list和iterator方法的区别
- Hibernate面试题 --- list和iterator方法的区别
- hibernate -- list和iterator方法的区别
- Hibernate--- list和iterator方法的区别
- hibernate -- list和iterator方法的区别
- Hibernate Query查询的list方法和iterator方法区别
- hibernate中 list和iterator方法的区别
- hibernate list()和Iterator方法
- list和iterator方法的区别
- hibernate-Query的list方法与iterator方法的区别
- hibernate面试题 --- load()和get()方法的区别
- Hibernate之Query查询的list()方法和iterator()方法的区别
- Hibernate之Query查询的list()方法和iterator()方法的区别
- hibernate Query中的list和iterator方法区别
- Hibernate的load()、get()、list()、iterator()方法的区别
- Hibernate的load()、get()、list()、iterator()方法的区别
- Hibernate中的query.list()与query.iterator()方法的区别
- Hibernate 中Query的list方法和iterator方法
- 用户和组管理
- Solr6自定义mmseg4j中文分词库,升级mmseg4j
- Linux下TI omap芯片 MUX 配置分析(以AM335X芯片为例)
- 使用HTMLParser解析器爬取网页内容
- iTween基础之Value(数值过度)
- Hibernate面试题 --- list和iterator方法的区别
- ECMAScript6笔记:字符串的扩展(2)
- Windows 10无法设置静态IP的解决办法
- 【C/C++】int,string,char之间转换
- visual C++ 6.0开发工具与调试
- iTween基础之Look(使对象面朝指定位置)
- bgslibrary视频前景提取算法之三帧差法(二)
- 哈夫曼编码(修改后)
- iTween基础之Scale(缩放大小)