1. 鉴别器discriminator
    1. 概念
      1. 有时一个单独的数据库查询也许返回很多不同 (但是希望有些关联) 数据类型的结果集
      2. 表现很像 Java 语言中的 switch 语句
    2. 例子
      1. <discriminator javaType="int" column="vehicle_type"> <case value="1" resultMap="carResult"/> <case value="2" resultMap="truckResult"/> <case value="3" resultMap="vanResult"/> <case value="4" resultMap="suvResult"/> </discriminator>
  2. 缓存cache
    1. 要开启二级缓存,你需要在你的 SQL 映射文件中添加一行<cache/>
    2. <cache/>效果如下
      1. 映射语句文件中的所有 select 语句将会被缓存。
      2. 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
      3. 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
      4. 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
      5. 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
      6. 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
    3. 属性
      1. <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
      2. 以上配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的
    4. 收回策略
      1. LRU – 最近最少使用的:移除最长时间不被使用的对象。
      2. FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
      3. SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
      4. WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象
      5. 默认的是 LRU