写一个查询小例子
// 测试一级缓存的存在 @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中去读取数据,从哪儿拿的数据呢? 就是一级缓存,第一次查询的时候把查询结果放进了一级缓存第二次直接取出来用。