暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mybatis学习笔记-映射器高级特性

CodeWu 2019-03-13
311

级联

    级联主要用于获取存在关联关系的数据,级联过多会增加系统复杂度、同时降低系统性能,导致系统耦合、复杂和难以维护。

    mybatis中的级联分为三种:

    鉴别器(discriminator):根据条件决定采用具体实现类级联的方案。

    一对一(association)

    一对多(collection)

    mybatis中没有多对多级联,通过两个一对多级联进行替换。

    一对一(association)及一对多(collection)

    

配置属性作用
property映射至pojo的哪个属性上
column数据库列名
select命名空间+SQL ID的方式,指向对应映射器的执行SQL

    鉴别器(discriminator)

    

配置属性作用
column根据哪个字段的值进行鉴别
case鉴别条件
value鉴别值
resultMap使用哪个resultMap进行结果映射

N+1问题

    在配置了级联后,对所有的级联项配置相关数据进行查询。在我们执行查询时,将我们不需要关注的数据同时进行了关联查询,执行了多条无关的无意义的查询SQL,导致数据库资源损耗和系统性能下降。通常通过延迟加载功能来解决N+1问题。

延迟加载

    我们希望一次性把常用的级联数据通过SQL直接查询出来,对于不常用的级联数据不要取出,等待使用时进行取出,这些不常用的数据可采用延迟加载功能。

配置项作用配置项值默认值
lazyLoadingEnabled延迟加载全局开关。开启(true),所有关联对象延迟加载。可通过设置fetchType覆盖该配置项true|falsefalse
aggressiveLazyLoading启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载,反之按需加载true|false3.4.1之前true;之后false

缓存

mybatis中缓存分为一级缓存和二级缓存。

名称作用域配置
一级缓存SqlSession无需配置,默认开启
二级缓存SqlSessionFactory映射器中配置<cache/>

二级缓存配置项

配置属性作用配置值/默认值
blocking是否使用阻塞性缓存true|false/false
readOnly缓存内容是否只读true|false/false
eviction

缓存策略,分为

LRU:移除最长时间不被使用对象

FIFO:按对象进入缓存顺序移除

SOFT:移除基于垃圾回收器状态和软引用规则的对象

WEAK:更积极移除基于垃圾回收器状态和弱引用规则的对象

LRU
flushInterval缓存刷新时间,只有在执行写操作时有效正整数
type
自定义缓存类
size
缓存对象个数默认1024

存储过程

    存储过程在数据库中预编译好,具备性能高、可重复使用的特性。存储过程中定义了三种类型的参数:输入参数、输出参数、输入输出参数。

参数类型参数作用
输入参数程序输入到存储过程的参数
输出参数存储过程经过计算返回给程序的结果参数
输入输出参数一开始作为输入参数传递给存储过程、经过计算后由存储过程返回的参数

    存储过程配置与调用

    select元素中将statementType值设置为CALLABLE,parameterType可以为存储过程参数自定义Pojo。

    调用存储过程中放入对应参数及属性,在属性上通过设置mode属性值设置该参数为输入|输出参数;指定对应的jdbcType设置数据类型,mybatis找对应的typeHandler进行对应的数据类型转换工作。

    

文章转载自CodeWu,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论