mybatics的两种缓存

    科技2026-01-18  11

    一、概念

    1.MyBatis缓存

    a)一级缓存:SqlSession a)默认开启的 b)一级缓存只对当前SqlSession有效 b)二级缓存:SqlSessionFactory b)默认是关闭的,需要手动开启 b)如何开启二级缓存呢? a)在Mapper文件中添加<cache>标签 b)放在缓存中的对象需要实现序列化接口 1)对象序列化(保证对象读写一致的) 2)版本号 c)事务需要提交 c)每个SQLSession共享

    2.缓存的概念

    缓存是提高查询效率,减少和数据库的交互 最大的问题就是同一个数据放了两个地方,在修改数据库的同时,刷新缓存

    3.适合放入缓存中的数据

    1)经常被查询 2)很少被修改

    4.不适合放入缓存中的数据

    1)经常被修改 2)很少被查询 3)重要的数据(公共的资源,票,钱)

    二、实例

    1.一级缓存

    (1)同一个sqlsession只要未关闭可以进行多次操作(增删改查等 即:调增删改查相关方法方法) (2)第一次查询时会提交sql语句,之后相同的操作都不会再提交sql,因为有一级缓存(sqlsession范围的缓存),相同的操作后续会从缓存中获取结果但是,一旦sqlsession关闭(即:与数据库会话断开) 再操作就会报错"Executor was closed"(执行对象被关闭)

    2.二级缓存

    不同的sqlsession查询相同的内容,未开启二级缓存时每个sqlsession都会发送sql,开启二级缓存后,不同的sqlsession之间是共享的。 注:

    二级缓存 开启方法: a)在Mapper文件中添加标签 b)放在缓存中的对象需要实现序列化接口 1)对象序列化(保证对象读写一致的) 2)版本号 c)事务需要提交

    Processed: 0.015, SQL: 9