hibernate二级缓存的配置

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


文章只是自己做的笔记,若有朋友参考学习请百度其他网友的。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值