zoukankan      html  css  js  c++  java
  • hibernate list和iterate

    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();
        }
    }

  • 相关阅读:
    自学人工智能之数学篇,数学入门并不难
    2018-8-10-win10-uwp-使用资源在后台创建控件
    2019-9-2-win10-uwp-弹起键盘不隐藏界面元素
    2019-7-31-程序猿修养-日志应该如何写
    2018-11-19-WPF-在image控件用鼠标拖拽出矩形
    2019-8-31-C#-如何给-ValueTuple-返回值添加注释
    2019-11-12-浅谈-Windows-桌面端触摸架构演进
    2018-8-10-win10-uwp-打开文件管理器选择文件
    2018-8-10-win10-uwp-验证输入-自定义用户控件
    2019-8-31-dotnet-特性-DynamicallyInvokable-是用来做什么的
  • 原文地址:https://www.cnblogs.com/flying607/p/3483294.html
Copyright © 2011-2022 走看看