package com.rlovep.cache;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;
public class AppList_iterator {
private static SessionFactory sf=null;
static{
Configuration config=new Configuration().configure().addClass(User.class);
//创建serviceRegistry 代替buildSessionFactory()方法
ServiceRegistry serviceRegistry =new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
// 创建session的工厂对象
sf = config.buildSessionFactory(serviceRegistry);
}
//测试list
@Test
public void testList(){
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from User" );
List<User> list = query.list();//直接从数据库中全部得到数据
//只会执行一次查询,选择全部结果到list中;
for(User u:list){
System.out.println(u.getUserName());
//u.setUserName("peace");
}
//执行第二次
list = query.list();//会放入缓存,但是不会从缓存中获得数据;此处还是查询数据库
//只会执行一次查询,选择全部结果到list中;
for(User u:list){
System.out.println(u.getUserName());
}
//测试list会放入缓存
Iterator<User> iterate = query.iterate();//向数据库中查询所有主键
while(iterate.hasNext())
{
User user = iterate.next();
System.out.println(user.getUserName());//从缓存中获得数据
}
tx.commit();
session.close();
}
//测试iterator
@Test
public void testIterator(){
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from User" );
Iterator<User> iterate = query.iterate();//向数据库中查询所有主键
int i=0;
while(iterate.hasNext())
{
User user = iterate.next();
System.out.println(user.getUserName());//会发送多次查询语句,如果缓存中有直接查询得到
user.setUserName("peace"+i++);
}
//执行第二次
iterate = query.iterate();//向数据库中查询所有主键,此处还是从数据库获得
while(iterate.hasNext())
{
User user = iterate.next();
System.out.println(user.getUserName());//从缓存中获得数据
}
tx.commit();
session.close();
}
}