鉴别器和缓存的配置
鉴别器
鉴别器的用法相当于switch语句,作用是根据条件,把搜索的结果映射到对应的属性上面。
语法:
| <discriminator javaType="int" column="draft">
<case value="1" resultType="DraftPost"/>
</discriminator>
|
一个完整的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | <resultMap id="vehicleResult" type="Vehicle">
<id property=”id” column="id" />
<result property="vin" column="vin"/>
<result property="year" column="year"/>
<result property="make" column="make"/>
<result property="model" column="model"/>
<result property="color" column="color"/>
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultType="carResult">
<result property=”doorCount” column="door_count" />
</case>
<case value="2" resultType="truckResult">
<result property=”boxSize” column="box_size" />
<result property=”extendedCab” column="extended_cab" />
</case>
<case value="3" resultType="vanResult">
<result property=”powerSlidingDoor” column="power_sliding_door" />
</case>
<case value="4" resultType="suvResult">
<result property=”allWheelDrive” column="all_wheel_drive" />
</case>
</discriminator>
</resultMap>
|
这个例子当 vehicle_type
等于不同的值得时候,会映射不同的结果
把这个例子拆分之后的写法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <resultMap id="vehicleResult" type="Vehicle">
<id property=”id” column="id" />
<result property="vin" column="vin"/>
<result property="year" column="year"/>
<result property="make" column="make"/>
<result property="model" column="model"/>
<result property="color" column="color"/>
<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>
</resultMap>
<resultMap id="carResult" type="Car">
<result property=”doorCount” column="door_count" />
</resultMap>
<resultMap id="carResult" type="Car" extends=”vehicleResult”>
<result property=”doorCount” column="door_count" />
</resultMap>
|
缓存
默认情况下是没有开启缓存的,开启缓存,需要在Sql映射文件中添加如下语句
产生的效果:
- 映射语句文件中的所有 select 语句将会被缓存
- 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存
- 缓存会使用 Least Recently Used(LRU ,最近最少使用的)算法来收回
- LRU:最近最少使用的:移除最长时间不被使用的对象
- FIFO:先进先出:按对象进入缓存的顺序来移除它们
- SOFT:软引用:移除基于垃圾回收器状态和软引用规则的对象
- WEAK:弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象
- 根据时间表(比如 no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新
- 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用
- 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
上面这些效果都可以通过cache的属性来指定
| <cache
eviction="FIFO" //回收算法
flushInterval="60000" //刷新时间单位ms
size="512" //缓存引用的大小
readOnly="true"/> //是否只读
|