mybatis一级缓存理解
大家在mybatis中都或多或少听说过一级和二级缓存,
一级缓存的作用域为同一个sqlSession。
个人对一级缓存虽然了解在同一个sqlSession中缓存起作用,在执行插入,删除,修改之后缓存会被清除。
自己想了一下是不是每一次接口的请求进来都会创建一个sqlSession呢?如果创建了一个sqlSession那么这个一级缓存存在还有什么意义呢?
在查阅相关博客后总结出来对一级缓存的一些理解,可能存在一些错误请指出。
查询: 如果进来一个查询操作 mybatis会根据 :(statementId + rowBounds + 传递给JDBC的SQL + 传递给JDBC的参数值) 来获取是否存在这样一个sqlSession 如果没有则创建并且进入数据库查询数据,然后将数据缓存在cache中 ,如果存在(存在则表示 这个查询语句与之前的进行过得查询语句一样,不需要再进入数据库查询)则获取这个sqlSession,然后通过查询cache(缓存)中的数据。
更新数据库: 但是如果此时进来一个插入,删除,修改的操作呢,这样是不可能获取到这个sqlSession的 并且 mybatis会清除这个sqlSession的cache,那么通过之前的(statementId + rowBounds + 传递给JDBC的SQL + 传递给JDBC的参数值)是无法获取到sqlSession的 ,mybatis会清除相应的mapper下的所有 sqlSession 。
小白作者,如有错误请指出~
文章参考:MyBatis的一级缓存实现详解 及使用注意事项
文章参考:在同一个方法中,Mybatis多次请求数据库,是否要创建多个SqlSession会话