MyBatis之一级缓存讲解

一、缓存的定义

        在计算机中为了匹配各种存储设备之间速度的不平衡,特设立缓存减少数据检索的时间(比如cpu的cache),在数据库中亦是如此,如果每次查询数据都直接从数据库中检索必定会浪费大量的时间。为此MyBatis将常用数据放入SqlSession的缓存中,这样在检索数据的过程中就先在缓存中查找如果缓存中不存在才会去数据库中查找,并将查找的数据放入SqlSession缓存中方便下次检索。大大减少了检索的时间开销


二、一级缓存注意事项    

        MyBatis一级缓存的作用域是同一个SqlSession,在同一个SqlSession中两次执行相同的Sql语句,第一次执行完毕会将数据库中的查询的数据写到缓存中(内存)中,第二次会从缓存中获取数据将不再从数据库查找,从而提高查询效率,当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。MyBatis默认开启一级缓存。

三、代码及实验结果展示

           1、两次查询相同的数据

        SqlSessionFactory sqlSessionFactory = GetSessionFactroy();
		SqlSession openSession = sqlSessionFactory.openSession();
		
		OrdersMapperUser mapper = openSession.getMapper(OrdersMapperUser.class);
		
		MyUser user = mapper.findUserByid(1101);
		System.out.println(user.getUsername()+"\t"+user.getPassword());
		
		MyUser user2 = mapper.findUserByid(1101);
		System.out.println(user2.getUsername()+"\t"+user.getPassword());


                运行结果:

               

                我们对数据库进行两次查询,却看到程序只向数据库发送了一条查询语句,这是因为第二次查询时我们已经在缓存中查询到数据,无需再访问数据库进行查询


            2、两次查询不同数据

                SqlSessionFactory sqlSessionFactory = GetSessionFactroy();
		SqlSession openSession = sqlSessionFactory.openSession();
		
		OrdersMapperUser mapper = openSession.getMapper(OrdersMapperUser.class);
		
		MyUser user = mapper.findUserByid(1101);
		System.out.println(user.getUsername()+"\t"+user.getPassword());
		
		MyUser user2 = mapper.findUserByid(1102);
		System.out.println(user2.getUsername()+"\t"+user.getPassword());

            运行结果展示:

                  

                 在这里我们可以清楚的看到因为数据不在缓存中的缘故,程序向数据库发送了两次查询请求



附:本文皆为作者原创,如若转载请注明出处

    

猜你喜欢

转载自blog.csdn.net/qq_36441169/article/details/80764727