博客负责人会就Java的面试问题写一系列文章,包括J2ee、SQL、主要的Web框架、中间件等面试过程中面试官经常会问的问题。 敬请关注。 一起学习,一起成长,文章底部有面试问题。
mybatis的一级缓存
mybatis的l1缓存以sqlsession为生命周期,多次执行相同的sql语句时,只需要首次连接到数据库查询,剩下的几次都可以从mybatis缓存中获取。生命周期:明智的星月sqlsession消失,会话结束后缓存消失; 下次有能力的星月sql执行非sselect语句(add、delete、update、merge等)时,缓存也会直接全部清除以保证数据的完整性。 如果sqlsession调用了close方法,则缓存不可用; 调用clearCache方法时,缓存将为空。
缓存原理:大致是首先根据你的查询statementId参数信息mybatis自动生产key的值,再次查询时,将key的值在Cache中查找对应的value,如果有的话获取Cache中的value
如果没有,则查询数据库,并基于自动生成的密钥将已查询的值保存在缓存中。
mybatis的二级缓存
mybatis的二级高速缓存基于APP是生命周期。 范围由每个namepace的一个缓存保存和维护,同一namespace放置在一个缓存对象上,在此namaspace中运行时下次有能力的星月sql执行非sselect语句(add、delete、update、merge等)时,将清除整个namespace的缓存。
假设Employee表中的数据在RoleMapper.xml中发生了更改,并且缓存可能不会立即更新。 因此,应尽量避免使用l2缓存。
图像源(3359 www.cn blogs.com /超文本标记/P/7739749.html ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。
面试拓展:
昨天回顾请写出mybatis的批量插入demo。
说一下mybatis和jpa的区别。
主要区别:
jpa是对象与对象之间的映射,mybatis是对象与结果集之间的映射。
jpa移植的性能很好,mybatis需要更改sql语句。
-------------
虽然写得不好,但是如果大家有更高的见解的话欢迎评论。