System.out.println("--------------------------------------");
Iterator iter = session.createQuery("from User s where s.id<3")。iterate();
while (iter.hasNext()) {
User age = (User) iter.next();
System.out.println(age);
}
session.getTransaction()。commit();
session.close();
结果如下:
Hibernate: select user0_.id as id0_, user0_.username as username0_, user0_.age as age0_, user0_.password as password0_ from User user0_ where user0_.id<3
User [id=1, username=JAY, age=8, password=JAY]
User [id=2, username=aa, age=3, password=aa]
--------------------------------------
Hibernate: select user0_.id as col_0_0_ from User user0_ where user0_.id<3
User [id=1, username=JAY, age=8, password=JAY]
User [id=2, username=aa, age=3, password=aa]
从结果可知,第一次采用list查询,将对象全部取出,然后当第二次采用iterate查询时,只执行了对id(主键)的查询,然后通过主键从缓存中取出结果;可见采用list查询时在也会将结果放置缓存,只是它每次依旧从数据库中重新查询取得。
Iterate实例(查询对象属性):
SessionFactory factory = new Configuration()。configure()。buildSessionFactory();
Session session=null;
session=factory.openSession();
session.beginTransaction();
Iterator iter= session.createQuery
("select s.username from User s where s.id<3")。iterate();
while (iter.hasNext()) {
String age = (String) iter.next();
System.out.println(age);
}
System.out.println("--------------------------------------");
iter= session.createQuery
("select s.username from User s where s.id<3")。iterate();
while (iter.hasNext()) {
String age = (String) iter.next();
System.out.println(age);
}
session.getTransaction()。commit();
session.close();
结果如下:
Hibernate: select user0_.username as col_0_0_ from User user0_ where user0_.id<3
JAY
aa
--------------------------------------
Hibernate: select user0_.username as col_0_0_ from User user0_ where user0_.id<3
JAY
aa
从结果可知,当查询对象属性的时候,则是直接查询对象相应的属性,而不再查询对象id(主键);并且第二查询的时候是从数据库中重新查询取出结果,而不是从缓存中直接取出。
List实例(查询对象属性):
SessionFactory factory = new Configuration()。configure()。buildSessionFactory();
Session session=null;
session=factory.openSession();
session.beginTransaction();
List<String> list = session.createQuery
("select s.username from User s where s.id<3")。list();
for(String s:list){
System.out.println(s.toString());
}
System.out.println("--------------------------------------");
list =(List) session.createQuery
("select s.username from User s where s.id<3")。list();
for(String s:list){
System.out.println(s.toString());
}
session.getTransaction()。commit();
session.close();
结果如下:
Hibernate: select user0_.username as col_0_0_ from User user0_ where user0_.id<3
JAY
aa
--------------------------------------
Hibernate: select user0_.username as col_0_0_ from User user0_ where user0_.id<3
JAY
aa
结论和Iterate实例(查询对象属性)的结论一样