首页 > 代码库 > hibernate05--list和iterator

hibernate05--list和iterator

/**
 * 
 * @author 小豆腐
 *                      以后的你,会感谢现在努力的自己!努力!坚持!不放弃!
 */
public class StudentTest {

    Configuration configuration = null;
    SessionFactory sessionFactory = null;
    Session session = null;
    Transaction transaction = null;

    // 测试方法有相同的代码块
    @Before
    public void before() {
        // 01.加载配置文件(hibernate.cfg.xml) 必须位于src的根目录下
        configuration = new Configuration().configure();
        // 02.创建会话工厂 设置成单例模式
        sessionFactory = configuration.buildSessionFactory();
        // 03.通过工厂创建会话session HttpSession(用户session)
        session = sessionFactory.openSession();
        // 04.利用面向对象的思想来操作数据库 增删改都必须开启事务
        transaction = session.beginTransaction();
    }
    
    @After  //关闭session  
    public  void  after(){
        //查询中没有session  做非空验证
        if (session!=null) {
            // 05.关闭session
            session.close();
        }
    }
    /**
     * HQL:hibernate的查询语言!
     * 
     * 执行hql语句的步骤:
     * 01.获取session
     * 02.书写hql语句
     * 03.session.CreatQuery(hql);创建 Query对象
     * 04.执行查询
     * 
     * 
     * list():不管我们清不清空缓存  只要是list()就立即查询数据库 产生一条select语句!
     */
    
    @Test
    public  void   testList(){
        //String  sql="select * from stu";  stu 是表名
        String  hql="from Student";  //Student 必须是类名
        //获取query对象
         Query query = session.createQuery(hql);
         //开始查询
         System.out.println("**************");
        List list= query.list();   // 只有一条sql语句
        System.out.println("**************");
        for (Object object : list) {
            System.out.println(object);
        }
        session.clear(); //清空缓存
        // 不管我们清不清空缓存  只要是list()就立即查询数据库 产生select语句
        List list2= query.list(); 
    }
    
    /**
     * Iterator():
     * 01.在没有缓存的情况下    执行N+1条查询语句
     *    第一条查询id的语句 在query.iterate(); 时候产生!
     *    其余的N条语句都是在iterate.hasNext()时候产生!
     *    N代表数据库中的总记录数
     */
    @Test
    public  void   testIterator(){
        String  hql="from Student";  //Student 必须是类名
        Query query = session.createQuery(hql);
        System.out.println("**************");
        Iterator iterate = query.iterate();  
        System.out.println("**************");
        while (iterate.hasNext()) {
            Object object = (Object) iterate.next();
            System.out.println(object);
        }
    }
    
    /**
     * 02.有缓存的情况
     * 查询所有的学生信息!  
     * iterate():执行一条sql语句!
     */
    @Test
    public  void   testIterator2(){
        String  hql="from stu";  
        Query query = session.createQuery(hql);
        List list = query.list();  // 现在 已经产生sql语句   所有的student已经在session缓存中了
        System.out.println("*********************");
        Iterator iterate = query.iterate();  
        System.out.println("*********************");
        while (iterate.hasNext()) {
            Object object = (Object) iterate.next();
            System.out.println(object);
        }
    }
    
    /**
     * get :产生1条
     * iterate():产生1条
     * iterate.hasNext():产生3条
     */
    @Test
    public  void   testIterator3(){
        Student stu= (Student) session.get(Student.class, 1);   //现在缓存中有ID为1的对象    
        String  hql="from Student";  
        Query query = session.createQuery(hql);
        Iterator iterate = query.iterate();  
        System.out.println("*********************");
        while (iterate.hasNext()) {
            Object object = (Object) iterate.next();
            System.out.println(object);
        }
    }

}

 

hibernate05--list和iterator