(19)list OR iterator
//类在(15)QL1中
/*
* 现阶段:用list即可。!!!!
*/
/*list:直接获取对象
* select category0_.id as id0_,category0_.name as name0_ from Category category0_
*/
@Test
public void HQ_list() {
Session session=sf.getCurrentSession();
session.beginTransaction();
Query q=session.createQuery("from Category ");
List<Category> topics=(List<Category>)q.list();
for(Category t:topics){
System.out.println(t.getName());
}
session.getTransaction().commit();
}
/*iterator
* 先获取到id
* select category0_.id as col_0_0_ from Category category0_
*当用到除id外其他的属性使,才去select该对象完整信息
* select category0_.id as id0_0_, category0_.name as name0_0_ from Category category0_ where category0_.id=?
*
*/
@Test
public void HQ_iterator() {
Session session=sf.getCurrentSession();
session.beginTransaction();
Query q=session.createQuery("from Category ");
Iterator<Category> categorys=(Iterator<Category>)q.iterate();
while(categorys.hasNext()){
System.out.println(categorys.next().getName());
//System.out.println(categorys.next().getId());
}
session.getTransaction().commit();
}
/*list:直接获取对象。一个session中两个select相同的语句,并不利用缓存
* 所以会select两次
*/
@Test
public void HQ_list2() {
Session session=sf.getCurrentSession();
session.beginTransaction();
Query q=session.createQuery("from Category ");
List<Category> topics=(List<Category>)q.list();
for(Category t:topics){
System.out.println(t.getName());
}
List<Category> topics2=(List<Category>)q.list();
for(Category t:topics2){
System.out.println(t.getName());
}
session.getTransaction().commit();
}
/*iterator
* 会利用session的缓存机制,只会取一次。
*/
@Test
public void HQ_iterator2() {
Session session=sf.getCurrentSession();
session.beginTransaction();
Query q=session.createQuery("from Category ");
Iterator<Category> categorys=(Iterator<Category>)q.iterate();
while(categorys.hasNext()){
System.out.println(categorys.next().getName());
//System.out.println(categorys.next().getId());
}
Iterator<Category> categorys2=(Iterator<Category>)q.iterate();
while(categorys2.hasNext()){
System.out.println(categorys2.next().getName());
//System.out.println(categorys.next().getId());
}
session.getTransaction().commit();
}