mybatis学习总结-高级知识

  1、关联查询1(一对多):<association>标签,属于resultMap的字标签

    1. 示例:

     

           + 注1:也可以使用resultType进行实现,且相对简单。为了遵守开发规范,要求提供的pojo包装类的属性名与查询结果的列名一致。

           + 注2:resultMap可以实现延迟加载,可以满足一些特定场景的要求。

    2. 集合内部类型的指定:指的是被返回对象内置集合需要的类型,<collection>标签

      》属性:ofType  

      示例:  

               

      + 注:可以使用extend属性继承已经存在resultMap

      示例:

    

  2、关联查询2(多对多):<association>与<collection>的有序嵌套。

  3、高级映射——延迟加载

    ->原理:根据因果关系进行分段查询(后一次的查询需要前一次的结果作为查询条件),在mybatis中延迟加载部分的触发条件为代码段请求到了该部分数据

    ->使用<association>select属性指定延迟加载的statement语句

      示例:

    

  原理:先单表查询,触发条件后再根据第一次的查询结果查询另外的表。column=“xxxx”是进行懒加载时的查询条件。这里的单表可能描述不是很准确(需要进行验证)

  解释:调用接口方法时,开始只进行单表查询,只有触发相应的条件,才会开始延迟加载。

  + 补充:SqlMapConfig.xmlp配置,mybatis默认关闭了懒加载,需要使用<settings>进行配置。   

    示例及解释:

    

      4、查询缓存:

   》解释:

    

    解释:

      ->  一级缓存工作原理:第一次查询某结果,先搜寻缓存中是否存在,不存在则从数据库中查询;当第二次使用相同的的查询语句时,则可直接从缓存中获取数据。如果在第二次查询之前进行了commit操作,则会清空缓存。目的是为了避免脏读。一级缓存默认开启。

        ->二级缓存工作原理:一级缓存的延展,跨SqlSession共享一个mapper。以namepace为界限对mapper共享缓存进行区分。同样在执行了commit操作之后,会清空二级缓存,避免脏读。

        * 开启二级缓存:需要在SqlMapperConfig.xml和mapper.xml中分别开启二级缓存

          》SqlMapConfigxml开启二级缓存:

        

           》mapper.xml中开启二级缓存:

        

           》可能会被缓存的对象的类需要实现序列化接口(Serializable)

          +补充:可以在statement语句上禁用二级缓存。

         

          +补充:执行操作之后在statement语句知乎刷新缓存

              

           +补充:mybatis详解:https://www.w3cschool.cn/mybatis/

 

   5、mybatis与ehcache进行整合

    1. ehcache:一个分布式缓存框架

    2. 整合原理:

    3. mybatis与ehcache的整合:

        》cache接口:

          

        +补充:与其他的分布式缓存框架整合同理(如redis等)。

        》在mapper.xml中配置:

          

         》 需要加入的jar包:

            * ehcache自身的jar:

            * 整合的jar:

        》在classpath下建立ehcache.xml

          

  6、二级缓存的应用场景:对数据实时性要求不高,且访问量大。

      1. 性能优化:实际应用中,设置刷新间隔时间

      2. 局限性:对细粒度事件的缓存实现不好。

posted @ 2020-02-14 14:11  怪兽不纯粹  阅读(114)  评论(0)    收藏  举报