Mybatis-好文推荐

Mybatis-好文推荐

系列文章目录

  1. Mybatis-原理
  2. Mybatis-缓存
  3. Mybatis-mapper文件中$与#的区别
  4. Mybatis-和Hibernate对比
  5. Mybatis-collection错误去重问题
  6. Mybatis-好文推荐

0x01 使用

  • MyBatis3使用手册
  • MyBatis极速入门开发手册(2017-2-6更新)
  • Mybatis传递多个参数的4种方式
  • foreach标签属性解读

0x02 标签

  • Mybatis全部标签
  • mybatis常用标签
  • Mybatis之动态sql标签
  • trim标签的使用
    Mybatis-好文推荐_第1张图片

0x03 基本概念

  • 关于MyBatis mapper的insert, update, delete返回值
    The value returned by the insert, update and delete methods indicate the number of rows affected by the statement.

    在mapper的xml中, 不需要(也不能)给insert, update, delete指定resultType

    insert, update, delete只支持这些Attributes: id, parameterType, parameterMap, flushCache, timeout, statementType, useGeneratedKeys, keyProperty, keyColumn, databaseId

  • SqlSessionFactory和SqlSession介绍和运用

0x04 缓存

  • Mybatis:缓存的使用及源码分析,核心概念,实验分析

  • 美团-聊聊MyBatis缓存机制

  • MyBatis缓存-简洁明了

  • 阿里-Mybatis缓存揭秘

  • 美团-凯伦说-Mybatis缓存

  • mybatis一级与二级缓存详解-图文并茂

  • Mybatis的一级缓存和二级缓存执行顺序
    说明当二级缓存开启的情况下,即使是一个sqlSession中的缓存,都会先去查一下二级缓存,再返回查一级缓存; 所以说,缓存执行顺序是:二级缓存–>一级缓存–>数据库

  • Mybatis缓存实例分析

  • 二级缓存的开启和使用,以及刷新等

  • 更详细的缓存说明,以及第三方实现二级缓存

  • 图文并茂+特点说明

  • Spring+mybatis
    Spring将事务放到Service中管理,对于每一个service中的sqlsession是不同的,这是通过mybatis-spring中的org.mybatis.spring.mapper.MapperScannerConfigurer创建sqlsession自动注入到service中的。 每次Serivce查询之后都要进行关闭sqlSession,关闭之后数据被清空。所以spring整合之后,如果没有事务,一级缓存是没有意义的。

    如果开启二级缓存,关闭sqlsession后,会把该sqlsession一级缓存中的数据添加到namespace的二级缓存中。这样,缓存在sqlsession关闭之后依然存在。

    对于查询多commit少且用户对查询结果实时性要求不高,此时采用mybatis二级缓存技术降低数据库访问量,提高访问速度。但不能滥用二级缓存,二级缓存也有很多弊端,从MyBatis默认二级缓存是关闭的就可以看出来。

    二级缓存是建立在同一个namespace下的,如果对表的操作查询可能有多个namespace,那么得到的数据就是错误的。举个简单的例子:

    订单和订单详情,orderMapper、orderDetailMapper。在查询订单详情时我们需要把订单信息也查询出来,那么这个订单详情的信息被二级缓存在orderDetailMapper的namespace中,这个时候有人要修改订单的基本信息,那就是在orderMapper的namespace下修改,他是不会影响到orderDetailMapper的缓存的,那么你再次查找订单详情时,拿到的是缓存的数据,这个数据其实已经是过时的。

    根据以上,想要使用二级缓存时需要想好两个问题:

    1. 对该表的操作与查询都在同一个namespace下,其他的namespace如果有操作,就会发生数据的脏读。
    2. 对关联表的查询,关联的所有表的操作都必须在同一个namespace。

0x05 生命周期

  • SqlSession等生命周期总结1
  • MyBatis生命周期(配图详解)

0x06 Mybatis和Hibernate对比

  • mybatis和hibernate区别大不大?
  • MyBatis和Hibernate相比,优势在哪里?

0x07 手写Mybatis

  • Mybatis
  • 手写一个Mybatis框架(简化)

0x08 Mybatis-Spring

  • 深入剖析 mybatis 原理(三)如何整合Spring
  • spring中的mybatis的sqlSession是如何做到线程隔离的?
  • 探讨spring整合mybatis时sqlSession不需要释放关闭的问题
  • 关于Mybatis与Spring整合之后SqlSession与mapper对象之间数量的问题
  • spring整合mybatis后,非事务环境下,每次操作数据库都使用新的sqlSession对象。因此mybatis的一级缓存无法使用(一级缓存针对同一个sqlsession有效)
  • 同一个IOC容器中同一个Mapper接口对应的代理类只有一个,比如系统仅有一个UserMapper接口实例对应UserMapper.xml

0x08 源码

  • Mybatis源码解析之MapperProxy
  • Spring整合mybatis创建SqlSession
  • Mybatis源码解读-设计模式总结

你可能感兴趣的:(mybatis)