一级缓存
一级缓存是sqlSession级别的,当操作数据库时需要创建sqlSession对象,每个sqlSession对象中都有一个hashMap来保存缓存数据,并且每个sqlSession对象中的hashMap都互相不影响。一级缓存是默认开启的。
当同一个sqlSession对象执行多次相同的sql语句时,第一次去数据库里面查询数据,然后将查询到的结果保存在缓存区里面,第二次就直接去缓存区里面查找数据,查到后就直接返回,提高查找的效率,降低数据库的压力。
当某个sqlSession对象执行了sql的insert,delete,update时,并执行了commmit()方法,就会清空缓存,保证缓存里面保存的都是最新的数据。一级缓存是跟sqlSession对象绑定在一起的,如果sqlSession对象消失了,那缓存也会被删除。
二级缓存
二级缓存是Mapper级别的,是被sqlSession共享的,作用域是Mapper的同一个namespace,当不同的sqlSession对象在同一个namespace执行相同的sql语句时,第一次去数据库查询数据,并将查询到的结果保存在缓存里面,之后就直接去缓存里面查询。二级缓存是默认关闭的。