首页 > 代码库 > Hibernate缓存
Hibernate缓存
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缓存
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。