mybatis一级缓存: 一级缓存是默认开启的,他是用来保存用户对数据库的操作和数据库返回的数据,结果会存入到 SqlSession为我们提供的一块区域中。该区域的结构是一个Map。 如果下一次用户再执行相同的请求,那么直接从内存中读数数据而不是从数据库读取。 这里要注意一个点,因为一级缓存是依赖于SqlSession对象的,当SqlSession对象消失时,Mybaits的一级缓存也就消失了。 当Mybaits与Spring整合的时候,不带Spring事务的方法内,每次请求数据库,都会新建一个SqlSession,这时候是使用不到一级缓存的,除了事务问题,还有一些问题也会影响到一级缓存,比如调用了Sqlsession的修改、添加、删除、commit()、close()等方法时,一级缓存也会被清空。
mybatis二级缓存: Mybatis的二级缓存是默认关闭的,它指的是Mybatis中SqlSessionFactory对象的缓存,由同一个SqlSessionFactory对象创建的SqlSession共享其二级缓存。即使开启了二级缓存,不同的sqlsession之间的缓存数据也不是想互访就能互访的,必须等到sqlsession关闭了以后,才会把其一级缓存中的数据写入二级缓存。
SqlSession对象中存放的是返回数据的对象,而SqlSessionFactory对象中存放的是数据
总结 一级缓存与二级缓存的不同之处:
1、Mybatis的一级缓存默认开启,而二级缓存默认关闭。 2、Mybatis的一级缓存指的是Mybaits中SqlSession对象的缓存,而二级缓存指的是SqlSessionFactory对象的缓存。一个SqlSessionFactory对象包括多个SqlSession对象。 3、SqlSession对象中存放的是返回数据的对象,而SqlSessionFactory对象中存放的是数据,不是对象。 4、Mybatis和Spring整合的时候,一级缓存与事务有关,而二级缓存与事务无关。
|