您的位置:首页 > 其它

hibernate二级缓存的配置

2017-05-23 18:59 190 查看
hibernate的二级缓存配置三种,类缓存、集合缓存、查询缓存。

Hibernate的缓存机制 主要是根据OID的形式查询的

一、类缓存

public class App {

    private static SessionFactory sessionFactory = new Configuration()//

            .configure()//

            .addClass(Department.class)// 添加Hibernate实体类(加载对应的映射文件)

            .addClass(Employee.class)// 添加Hibernate实体类(加载对应的映射文件)

            .buildSessionFactory();

    // 测试一级缓存(Session缓存)

    @Test

    public void testSessionCache() throws Exception {

        // ===================== 第1个Session

        Session session = sessionFactory.openSession();

        session.beginTransaction();

        Employee employee = (Employee) session.get(Employee.class,1); // 获取

        System.out.println(employee);

        session.getTransaction().commit();

        session.close();

        // ===================== 第2个Session

        Session session2 = sessionFactory.openSession();

        session2.beginTransaction();

        

        //根据oID查找

        Employee employee2 = (Employee) session2.get(Employee.
b170
class,1); // 获取

        System.out.println(employee2);

        session2.getTransaction().commit();

        session2.close();

    }

    // 测试二级缓存

    @Test

    public void testSecondCache() throws Exception {

        // ===================== 第1个Session

        Session session = sessionFactory.openSession();

        session.beginTransaction();

        Department department = (Department) session.get(Department.class, 1); // 获取

        System.out.println(department.getName());

        System.out.println(department.getEmployees());

        session.getTransaction().commit();

        session.close();

        // ===================== 第2个Session

        Session session2 = sessionFactory.openSession();

        session2.beginTransaction();

        Department department2 = (Department) session2.get(Department.class, 1); // 获取

        System.out.println(department2.getName());

        System.out.println(department2.getEmployees());

        session2.getTransaction().commit();

        session2.close();

    }

类缓存的配置:

类缓存的配置可以在实体映射中配置 也可以在hibernate.cfg.xml中配置

在hibernate.cfg.xml中配置如下:

步骤1:

设置类缓存,使用二级缓存

 <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

步骤二、

指定要使用二级缓存的类

<class-cache usage="read-only" class="包名.类名" />

集合缓存:

<collection-cache usage="read-only" collection="包名.类名.你类中的set 的命名" />

查询缓存:

<property name="cache.use_query_cache">true</property>

public void testQueryCache3() throws Exception {

        // ===================== 第1个Session

        Session session = sessionFactory.openSession();

        session.beginTransaction();

        List list = session.createQuery("FROM Employee e WHERE e.id<18")//

                .setCacheable(true)// 是否使用查询缓存,需要在hibernate.cfg.xml中开启查询缓存才行

                .list();

        System.out.println(list);

        session.getTransaction().commit();

        session.close();

        System.out.println("\n------------------\n");

        // ===================== 第2个Session

        Session session2 = sessionFactory.openSession();

        session2.beginTransaction();

        List list2 = session2.createQuery("FROM Employee e WHERE e.id<18")//

                .setCacheable(true)// 是否使用查询缓存

                .list();

        System.out.println(list2);

        session2.getTransaction().commit();

        session2.close();

    }

文章只是自己做的笔记,若有朋友参考学习请百度其他网友的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: