用编程方式证明Hibernate中一级缓存的存在

写一个查询小例子

// 测试一级缓存的存在
    @Test
    public void demo8(){
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();
                                                                                    
        Book book = (Book) session.get(Book.class, "2c2882bc42f1e93b0142f1e93d2c0000");
        System.out.println(book);
        System.out.println("========================================================");
        // 再次执行同样的查询 -- 直接使用一级缓存中的数据
        Book book1 = (Book) session.get(Book.class, "2c2882bc42f1e93b0142f1e93d2c0000");
        System.out.println(book1);
                                                                                    
        transaction.commit();
        session.close();
    }


看log

14:43:04,171  INFO TableMetadata:66 - columns: [first_name, last_name]
14:43:04,171  INFO TableMetadata:68 - foreign keys: []
14:43:04,181  INFO TableMetadata:69 - indexes: [primary]
14:43:04,181  INFO SchemaUpdate:217 - schema update complete
Hibernate:
    select
        book0_.id as id1_0_,
        book0_.name as name1_0_,
        book0_.price as price1_0_
    from
        hbm3.tbl_book book0_
    where
        book0_.id=?
Book [id=2c2882bc42f1e93b0142f1e93d2c0000, name=Hibernate入门经典, price=23.0]
========================================================
Book [id=2c2882bc42f1e93b0142f1e93d2c0000, name=Hibernate入门经典, price=23.0]

第一次查询的时候打印出了sql语句,第二次没有sql语句。

说明:第二次没有从DB中去读取数据,从哪儿拿的数据呢? 就是一级缓存,第一次查询的时候把查询结果放进了一级缓存第二次直接取出来用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章