mybatis缓存机制

一、一级缓存(本地缓存默认开启):sqlSession级别的缓存。一级缓存是一直开启的,无法关闭。SqlSession级别的一个Map

与数据库同义词会话期间查询到的数据会放到本地缓存中。

以后如果需要获取相同的数据,直接从缓存中拿,没有必要再去查询数据库。

1.一级缓存失效情况:

    没有使用到当前一级缓存的情况,效果就是,还需要再向数据库发出查询。

    1)SqlSession不同

        SqlSession openSession = SqlSessionFactory.openSession();

        SqlSession openSession2 = SqlSessionFactory.openSession();

    2)sqlSession相同,查询条件不一样。原因是当前缓存中没有改变查询条件后的数据

    3)sqlSession相同,查询条件一样,两次查询之间执行了增删改操作(这次增删改可能对当前数据有影响)

    4)sqlSession相同,手动清除了一级缓存(缓存清空)

        openSession.clearCache();//清空一级缓存方法

二、二级缓存(全局缓存):基于namespace级别的缓存:一个namespace对应一个二级缓存

        工作机制:

            1.一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中。

            2.如果会话关闭:一级缓存中的数据会被保存到二级缓存中:新的会话查询信息,就可以参照二级缓存中。

            3.sqlSession====EmployeeMapper===>Employee

                                         DepartmentMapper====>Department

                不同namespace查出的数据会放在自己对应的缓存中(map)

使用方法:

            1)开启全局二级缓存配置:



    

            2)去每个mapper.xml中配置使用二级缓存:

mybatis缓存机制_第1张图片

mybatis缓存机制_第2张图片

 

mybatis缓存机制_第3张图片

 






	
	
	


 
 	
 	
 
 	
 	
 
	
	
	

 	
 	
 
 	
 	
 	
 	
	
	
	
	
	
	
		insert into tbl_employee(last_name,email,gender) 
		values(#{lastName},#{email},#{gender})
	
	
	
	
		
		
			
			
			select EMPLOYEES_SEQ.nextval from dual 
			
		
		
		
		
		insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) 
		values(#{id},#{lastName},#{email}) 
		
	
	
	
	
		update tbl_employee 
		set last_name=#{lastName},email=#{email},gender=#{gender}
		where id=#{id}
	
	
	
	
		delete from tbl_employee where id=#{id}
	
	
	

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(mybatis缓存机制)