查看“进阶:查询缓存”的源代码
←
进阶:查询缓存
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Mybatis]] __TOC__ == 关于 == [[File:Mybatis缓存.png|800px]] Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。<br/> Mybatis默认开启一级缓存。 <br/><br/> Mybatis二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。<br/> Mybatis二级缓存默认关闭。 == 一级缓存 == [[File:Mybatis一级缓存.png|500px]] # 一级缓存区域是根据SqlSession为单位划分的。 # 每次查询会先从缓存区域找,如果找不到再从数据库查询,并将查询到的数据写入缓存。 # Mybatis内部存储缓存使用一个'''HashMap'''。 #* key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象; # sqlSession执行insert、update、delete等操作commit提交后会清空缓存区域。 === 示例 === <syntaxhighlight lang="java"> //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //第一次查询 User user1 = userMapper.findUserById(1); System.out.println(user1); //第二次查询,由于是同一个session则不再向数据发出语句直接从缓存取出 User user2 = userMapper.findUserById(1); System.out.println(user2); //在同一个session执行更新 User user_update = new User(); user_update.setId(1); user_update.setUsername("李奎"); userMapper.updateUser(user_update); session.commit(); //再一次查询,虽然是同一个session但是由于执行了更新操作session的缓存被清空,这里重新发出sql操作 User user3 = userMapper.findUserById(1); System.out.println(user3); //关闭session session.close(); </syntaxhighlight> == 二级缓存 == [[File:Mybatis二级缓存.png|500px]] # '''二级缓存区域是根据mapper的namespace划分的,相同namespace的mapper查询数据放在同一个区域'''。 #* 如果使用mapper代理方法每个mapper的namespace都不同,此时可以理解为二级缓存区域是根据mapper划分; # 每次查询会先从缓存区域找,如果找不到再从数据库查询,并将查询到的数据写入缓存。 # Mybatis内部存储缓存使用一个'''HashMap'''。 #* key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象; # sqlSession执行insert、update、delete等操作commit提交后会清空缓存区域。 === 开启二级缓存 === {| class="wikitable" ! 设置 !! 描述 !! 允许值 !! 默认值 |- | cacheEnabled | 对在此配置文件下的所有cache 进行全局性开/关设置。 | <nowiki>true | false</nowiki> | true |} Mybatis的二级缓存默认是不开启的,需要时在SqlMapConfig.xml中加入: <syntaxhighlight lang="xml"> <setting name="cacheEnabled" value="true"/> </syntaxhighlight> === 实现序列化 === === 示例 === === statement的二级缓存设置 === ==== 禁用缓存 ==== ==== 刷新缓存 ==== == Mybatis Cache参数 == == 整合ehcache ==
返回至“
进阶:查询缓存
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息