hibernate 缓存

hinernate有一级缓存和二级缓存

  1. 一级缓存:  session级别,hibernate自带的,每一个持久化的实例都有唯一的OID
session.beginTransaction();
        UserModel us = (UserModel) session.get(UserModel.class,"4028fa816d007b26016d007b2b620000");
        System.out.println(us);


        us = (UserModel) session.get(UserModel.class,"4028fa816d007b26016d007b2b620000");
        System.out.println(us);

控制台输出:

Hibernate: select usermodel0_.id as id1_2_0_, usermodel0_.name as name2_2_0_, usermodel0_.age as age3_2_0_ from tblUser usermodel0_ where usermodel0_.id=?
com.hibernate.cache.UserModel@2bdd8394
com.hibernate.cache.UserModel@2bdd8394

第一次调用get方法的时候,从数据库里面查询出一条记录,放到一级缓存里面;第二次get的时候,先从缓存中去查看是否有该对象,如果存在的话,直接从缓存里面取。

清楚缓存的方法有  1. session.evit(obj) , 2. session.clear()  清楚所有的缓存   3. session.close()  

session.beginTransaction();
        UserModel us = (UserModel) session.get(UserModel.class,"4028fa816d007b26016d007b2b620000");
        System.out.println(us);
        session.clear();
        //session.evit(us)
        us = (UserModel) session.get(UserModel.class,"4028fa816d007b26016d007b2b620000");
        System.out.println(us);

 

控制台输出:

Hibernate: select usermodel0_.id as id1_2_0_, usermodel0_.name as name2_2_0_, usermodel0_.age as age3_2_0_ from tblUser usermodel0_ where usermodel0_.id=?
com.hibernate.cache.UserModel@2bdd8394
Hibernate: select usermodel0_.id as id1_2_0_, usermodel0_.name as name2_2_0_, usermodel0_.age as age3_2_0_ from tblUser usermodel0_ where usermodel0_.id=?
com.hibernate.cache.UserModel@47c81abf

 

list()  和 iterate 问题: 

   session调用list() 查询列表的时候会发出一条sql,调用iterate()查询列表的时候会发出一条sql取id,查询对象的属性时,再发出一条sql取对象信息

UserModel us  =  (UserModel)session.createQuery(" from UserModel  ").iterate().next();
        System.out.println(us.getName());

        us  =  (UserModel)session.createQuery(" from UserModel  ").iterate().next();
        System.out.println(us.getName());

控制台输出:

Hibernate: select usermodel0_.id as col_0_0_ from tblUser usermodel0_
Hibernate: select usermodel0_.id as id1_2_0_, usermodel0_.name as name2_2_0_, usermodel0_.age as age3_2_0_ from tblUser usermodel0_ where usermodel0_.id=?
8888
Hibernate: select usermodel0_.id as col_0_0_ from tblUser usermodel0_
8888

输出共有三条sql,2条取id的sql(一级缓存不会缓存属性),一条取对象信息的sql,并且放入了一级缓存里面。

 

posted @ 2019-09-05 18:24  兵哥无敌  阅读(210)  评论(0编辑  收藏  举报