码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate缓存

时间:2014-12-22 22:41:15      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

Hibernate缓存

session.save(p);方法返回持久化对应的id

session.persist(p);推荐使用这一种,该方法不会返回持久化对应的id。

通过get(),load(),iterator()方法返回的结果都会放在一级缓存中。

管理:

session.clear();//当批量加载数据的时候,加载一部分的时候可以先清空加载过的数据

session.evicr();//清空session中的某一个不用的对象。

Configuration config = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(
                config.getProperties()).buildServiceRegistry();
        SessionFactory sessionFactory = config.buildSessionFactory(sr);

        Session session = sessionFactory.openSession();
         
        Transaction tx = session.beginTransaction();
        for(int i=0;i<100;i++){
            Person p = new Person();
            p.setName("admin_"+i);
            p.setPassword(123+i);
            p.setBirthday(new java.util.Date());
            Serializable id = session.save(p);
            System.out.println(i+"-----"+id);
            //避免一次性大量的实体数据入库导致内存溢出,可以先flush(),再clear();
            if(i % 10 == 0){
                System.out.println("-----------");
                session.flush();//刷新session,让缓存中的数据理解同步到表
                session.clear();//清除session中缓存的对象,释放这些对象占用的内存
            }
        }
        tx.commit();
        //tx.rollback();//回滚事务
        session.close();
    }
    

    /**
     * 缓存的管理使用
     */
    private static void test2() {
        Configuration config = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(
                config.getProperties()).buildServiceRegistry();
        SessionFactory sessionFactory = config.buildSessionFactory(sr);

        Session session = sessionFactory.openSession();

        Person p = (Person) session.get(Person.class, 3);

        System.out.println("get--1->" + p);
        System.out.println("-------get---------------");
        boolean flag = session.contains(p);// 判断session中是否有缓存参数对应的对象
        System.out.println(flag);

        session.evict(p);// 表示将参数指定的对象从session缓存中删除

        Person p2 = (Person) session.get(Person.class, 3);

        System.out.println("get--2->" + p2);

        session.close();
    }

    /*
     * 缓存的使用
     */
    private static void test1() {
        Configuration config = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(
                config.getProperties()).buildServiceRegistry();
        SessionFactory sessionFactory = config.buildSessionFactory(sr);

        Session session = sessionFactory.openSession();
        // 根据id 查询对应的持久化类的 一条 记录,查询到的对象会缓存在Session缓存中,方便下次快速从内存中获取
        Person p = (Person) session.get(Person.class, 3);

        System.out.println("get--1->" + p);
        System.out.println("-------get---------------");
        // 当我们通过Session获得过一个对象以后,如果在本Session没有关闭之前,再次获得之前获得过的数据,将直接才Session缓存中返回,
        // 而不再去查询数据库。
        Person p2 = (Person) session.get(Person.class, 3);

        System.out.println("get--2->" + p2);

        session.close();

        System.out.println("-------session.close()---------------");
        Session session2 = sessionFactory.openSession();
        // 因为不是同一个session缓存,所以需要重新查询一次数据库
        Person p3 = (Person) session2.get(Person.class, 3);
        System.out.println("get--1->" + p);

        session2.close();
    }

 

 

Hibernate缓存

标签:

原文地址:http://www.cnblogs.com/aicpcode/p/4179088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!