Mybatis入门基础--查询与缓存

xiaoxiao2021-02-28  115

查询

一对一查询: resultType:自定义一个pojo类包含查询结果的所有字段即可实现映射,无特殊需求(其别名、延迟加载)是用resultType

resultMap:映射到一个项目的vo类,关联的属性用association进行进一步的关联查询,用javaType表示类型,用可实现延迟加载,可用继承省略相同的联系

一对多查询: 由于一对多关系较为特殊,多的部分如果列入每个pojo则一的部分会出现重复,及每个情况一条记录,一对多也可使用resultMap,多的部分设为一的部分的集合属性,用collection关键字,用oftype表示类型

多对多查询: 同理,有映射要求的(关联关系定义)用resultMap,且collection和association可自嵌套和互相嵌套

延迟加载

collection和association可实现延迟加载 association中的select指定执行的statement的id

延迟加载配置:

<settings> <setting name="lazyLoadingEnable" value="true" /> <setting name="agressiveLazyLoading" value="false"/> </settings>

缓存

缓存的作用:减少数据库操作

一级缓存 1.sqlsession级别,不同sqlsession互不干扰,每个对象中有一个hashmap 2.在查询时先查询一级缓存,如果查询不到,再去数据库查询,一旦执行插入、清除、更新操作,就清空缓存,避免脏读 3.一级缓存是默认的,不需要配置 二级缓存 1.mapper级别,多个sqlsession操作同一个mapper的sql语句,多个session共用二级缓存,二级缓存是跨session的 2.一个sqlsession查询的结果存在二级缓存中,其他sqlsession执行同样查询是可以直接从二级缓存中取,一个mapper二级缓存只有一个,多个sqlsession共享一个hashmap(按照namespace划分) 3.二级缓存默认不开启,需要配置 sqlMapConfig.xml:

<setting name="cacheEnabled" value="true"></setting>

mapper.xml

<cache />

4.需要将数据序列化,因为二级缓存的介质不一定是内存,取出时需要反序列化 5.在sqlsession关闭的时候执行写入二级缓存操作 6.提交之后清空缓存

分布式缓存 作用:不使用分布式缓存,缓存的数据单独存在一个服务器,导致服务器之间的协作困难 实现方法:mybatis提供cache接口,重写接口的方法整合第三方缓存即可 mybatis默认实现的cache类PerpetualCache

示例:ehcache的整合 1.导入对应的ehcahe包 2.在mapper.xml文件中配置

<cache type="org.mybatis.cache.ehcache.EhchaheCache">

3.配置ehcache.xml

引用场景:查询频繁或查询耗时且实时要求不高 处理:间隔一段时间更新缓存(flushinterval) 局限性:一次更新是整个mapper更新,不适合细粒度的缓存

转载请注明原文地址: https://www.6miu.com/read-50577.html

最新回复(0)