导图社区 Mybatis
发一些个人学习的积累及自己遇到的面试题,有需要的同学可以参考一下。受个人能力的影响,若有错误欢迎提出来大家讨论。
社区模板帮助中心,点此进入>>
Mybatis
核心是SqlSessionFactory
全局唯一,相当于是一个数据库连接。
mybatis用什么缓存?
用一级缓存,作用域是sqlsession。二级缓存是全局的,不安全,作用域是mapper(命名空间级别)
缓存的是什么?
缓存结构是一个hashmap,key是hashcode+statementId+sql语句,value是查询的结果集。
缓存失效时间是多久?
当sqlsession提交或是关闭时,缓存失效。
mybatis xml里<号要用<转义。
mybatis动态sql参数若不确定时前面用1=1来占位,不然and前面没值报错。另一种方式是用where标签。
sqlsession的commit会强行清空缓存。
一级缓存默认开启。二级缓存要手动开启。
开启二级缓存方法。
<cache eviction="LRU"
1.LRU-最久未使用:当缓存对象数量达到上限后,自动触发对应算法对缓存对象除。
2.FIFO-先进先出:按对象进入缓存的顺序来清除它们。
3.SOFT-软引用:移除基于垃圾回收器上状态和软引用规则的对象。
4.WEAK-弱引用:更积极的移除基于垃圾收集器状态和弱引用规则的对象。
flushInterval="600000"
10分钟
size=512
表示最大缓存512个对象。根据表的数据需要调整。若表里有1000个商品,设1000表示每个商品都有缓存。
readOnly="true"/>
true表示取出缓存原始对象。false表示取出来的是缓存的副本。
useCache="false"表示不使用缓存,对于查询数据条数太多,使用缓存对内存的开太大。
flushCache="true"表示执行语句后立即清空缓存。比如执行了插入语句。
mybatis是先查询还是先分页?
mybatis是先分页后查询。
有没有写过类似mybatis类似的框架?
其实ORM框架是对jdbc的封装。