美文网首页
mybatis笔记

mybatis笔记

作者: 散装咖啡 | 来源:发表于2018-04-08 23:55 被阅读3次

    1,关联表查询的时候,可以使用association 或者collection延时加载。association是用于一对一和多对一,而collection是用于一对多的关系
    2,MyBatis中的一级缓存
    一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息。得到用户信息,将用户信息存储到一级缓存中。如果中间sqlSession去执行commit操作(执行插入、更新、删除),则会清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。 第二次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,直接从缓存中获取用户信息。
    主要体验在同一个SqlSession重复执行同一个sql语句。
    https://blog.csdn.net/eson_15/article/details/51669021
    3,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的。
    sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中。如果SqlSession3去执行相同 mapper下sql,执行commit提交,则会清空该UserMapper下二级缓存区域的数据。sqlSession2去查询用户id为1的用户信息,去缓存中找是否存在数据,如果存在直接从缓存中取出数据。
      缓存的执行原理和前面提到的一级缓存是差不多的,二级缓存与一级缓存区别在于二级缓存的范围更大,多个sqlSession可以共享一个mapper中的二级缓存区域。mybatis是如何区分不同mapper的二级缓存区域呢?它是按照不同mapper有不同的namespace来区分的,也就是说,如果两个mapper的namespace相同,即使是两个mapper,那么这两个mapper中执行sql查询到的数据也将存在相同的二级缓存区域中。
    主要体验在同一个mapper执行同一个sql语句
    传统的mybatis二级缓存无法分布式管理,如果需要分布式管理需要把缓存数据的管理托管给ehcache。
    二级缓存只适用于变化频率低的数据,例如统计数据。
    https://blog.csdn.net/eson_15/article/details/51669608

    相关文章

      网友评论

          本文标题:mybatis笔记

          本文链接:https://www.haomeiwen.com/subject/jllvhftx.html