博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate list和iterate
阅读量:6514 次
发布时间:2019-06-24

本文共 2435 字,大约阅读时间需要 8 分钟。

list方法会一次查出所有内容,放在list里和缓存中。再次查询同一内容仍然会去数据库重新查一遍,并刷新缓存。

iterate方法会一次查出所有内容的ID,等用到某个ID对应的内容时又会去根据主键查询内容,并放在缓存中,当再次查询相同的内容时不再查询数据库,直接调用session级缓存。

 

import java.util.Date;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class HibernateQLTest {

    private static SessionFactory sf;
   
    @BeforeClass
    public static void beforeClass() {
        sf = new AnnotationConfiguration().configure().buildSessionFactory();
    }
    @AfterClass
    public static void afterClass() {
        sf.close();
    }
   
    @Test
    public void testSchemaExport() {
        new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
    }
   
    @Test
    public void testSave() {
        Session session = sf.openSession();
        session.beginTransaction();
       
        for(int i=0; i<10; i++) {
            Category c = new Category();
            c.setName("c" + i);
            Topic t = new Topic();
            t.setCategory(c);
            t.setTitle("t" + i);
            t.setCreateDate(new Date());
            session.save(c);
            session.save(t);
        }
           
        session.getTransaction().commit();
        session.close();
    }
   
    //join fetch
    @Test
    public void testQueryList() {
        Session session = sf.openSession();
        session.beginTransaction();
        //List<Topic> topics = (List<Topic>)session.createCriteria(Topic.class).list();
        List<Category> categories = (List<Category>)session.createQuery("from Category").list();
       
        for(Category c : categories) {
            System.out.println(c.getName());
        }
       
        List<Category> categories2 = (List<Category>)session.createQuery("from Category").list();
        for(Category c : categories2) {
            System.out.println(c.getName());
        }
        session.getTransaction().commit();
        session.close();
       
    }
   
    @Test
    public void testQueryIterate() {
        Session session = sf.openSession();
        session.beginTransaction();
        //List<Topic> topics = (List<Topic>)session.createCriteria(Topic.class).list();
        Iterator<Category> categories = (Iterator<Category>)session.createQuery("from Category").iterate();
       
       
        while(categories.hasNext()) {
            Category c = categories.next();
            System.out.println(c.getName());
        }
       
        Iterator<Category> categories2 = (Iterator<Category>)session.createQuery("from Category").iterate();
       
        while(categories2.hasNext()) {
            Category c = categories2.next();
            System.out.println(c.getName());
        }
        session.getTransaction().commit();
        session.close();
       
    }
    public static void main(String[] args) {
        beforeClass();
    }
}

转载地址:http://crifo.baihongyu.com/

你可能感兴趣的文章
网站的开发流程介绍(转)
查看>>
浅析:Android--Fragment的懒加载
查看>>
Linux操作系统目录和Linux常用的文件和目录管理命令
查看>>
DIY:自己动手做一个迷你 Linux 系统(二)
查看>>
猫猫学IOS(三十)UI之Quartz2D画图片画文字
查看>>
windows 指定的网络名不可用__被我解决了!
查看>>
09值类型、引用类型、字符串
查看>>
ethereumjs/merkle-patricia-tree-2-API
查看>>
go标准库的学习-runtime
查看>>
pytorch Debug —交互式调试工具Pdb (ipdb是增强版的pdb)-1-使用说明
查看>>
NodeJS学习之文件操作
查看>>
导入excel
查看>>
AJAX的get和post请求原生编写方法
查看>>
WebSocket 是什么原理?为什么可以实现持久连接
查看>>
Python自学笔记-logging模块详解
查看>>
IE6下实现min-height
查看>>
Head First--设计模式
查看>>
iOS之CAGradientLayer属性简介和使用
查看>>
微信小程序UI组件、开发框架、实用库
查看>>
模块化Javascript代码的两种方式
查看>>