hibernate学习(五)

Hibernate的一级缓存

什么是缓存

1 数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。

(1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据

(2)把数据放到内存中,提供读取效率

Hibernate缓存

1 hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式

2 hibernate缓存特点

第一类 hibernate的一级缓存

(1)hibernate的一级缓存默认就是打开的

(2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围

(3)hibernate的一级缓存中,存储数据必须 持久态数据

第二类 hibernate的二级缓存

(1)目前不使用了,替代技术 redis

(2)二级缓存默认不是打开的,需要进行配置

(3)二级缓存使用范围,是sessionFactory范围

验证一级缓存存在

1 验证方式

(1)首先根据uid=1查询,返回对象

(2)其次再根据uid=1查询,返回对象

        @Test
        public void testCache() {
  	 		 SessionFactory sessionFactory=HibernateUtils.getSessionFactory();
             Session session=sessionFactory.openSession();  
             Transaction tx=session.beginTransaction();    
             //1根据uid=5进行查询
             //执行第一个get方法是否查询数据库,是否发送sql语句
             User user=session.get(User.class, 5);
             System.out.println(user);
             
             //2根据uid=5进行查询
             //执行;第二个get方法是否查询数据库,是否发送sql语句
             User user2=session.get(User.class, 5);
             System.out.println(user2);
             
             tx.commit();  
             session.close();  
             sessionFactory.close();
        }

第一步执行get方法之后,发送sql语句,查询一级缓存内容

第二个执行get方法之后,没有发送sql语句,查询一级缓存内容

运行结果如下所示:


一级缓存执行过程

Hibernate一级缓存特性

1 持久态自动更新数据库

    public class HibernateSelect {  
        @Test
        public void testDemo() {
  	 		 SessionFactory sessionFactory=HibernateUtils.getSessionFactory();
             Session session=sessionFactory.openSession();  
             Transaction tx=session.beginTransaction();    
             //1根据uid=5进行查询
             //执行第一个get方法是否查询数据库,是否发送sql语句
             User user=session.get(User.class, 5);
             System.out.println(user);
             
           //2设置返回值
             user.setUsername("韩梅梅");
            //3 调用方法实现
             //session.update(user);
             tx.commit();  
             session.close();  
             sessionFactory.close();
        }
    }  

2 执行过程(了解)

HIbernate事务操作

事务相关概念

1 什么是事务

事务是操作中的基本单元,事务中的操作,要么都成功,要么都失败。比如:银行转账

2 事务特性

acid,原子性,一致性,隔离性,持久性。

3 如果不考虑隔离性

(1)脏读,

(2)不可重复读

(3)虚读

4 设置事务隔离级别

(1)mysql默认隔离级别repeatable_read

Hibernate 事务规范代码写法

1 代码结构

    try{

    	开启事务,

    	提交事务

    	}catch(){

    	回滚事务

    	}finally{

    	关闭

    	}

//事务规范代码
    	@Test
    	public void testTx() {
    		SessionFactory sessionFactory=null;
    		Session session=null;
    		Transaction tx=null;
    		try {
    			sessionFactory=HibernateUtils.getSessionFactory();
    			session=sessionFactory.openSession();
    			tx=session.beginTransaction(); 
    			User user=new User();
    			user.setUsername("马云");
    			user.setPassword("778");
    			user.setAddress("杭州");
    			session.save(user);
    			int i=10/0;
    			//提交事务
    			tx.commit();
    		}
    		catch(Exception e){
    			tx.rollback();
    		}finally {
    			session.close();
    			sessionFactory.close();
    		}
    	}



猜你喜欢

转载自blog.csdn.net/pan_xi_yi/article/details/80506908