一、延迟加载

  延迟加载即加载延迟了,并不是一次性加载完而是按需加载,感觉应该是针对多表查询而言的,即先查询单表等需要另一张表的信息时再去加载,这样能提高数据库的性能;

  需要注意的是,mybatis提供的输出映射(即返回结果隐射)的两种属性resultType和resultMap,其中只有resultMap支持延迟加载;而resultType是通过ssociation或collection标签来实现的,具体实现的关键代码如下:

<resultMap id="testLazyLoading" type="最终映射的javabean">
<!-- 配置id和result标签 -->
......
  <!-- 配置association实现延迟加载 -->
<association property="" javatype="" select="指定需要延迟加载的sql对应的statement的id" column="select标签中sql查询的参数">
</association> </resultMap>

  最后,mybatis是不支持延迟加载的,需要在其配置文件sqlMapConfig中进行全局的配置,关键代码如下:

<!-- SqlMapConfig.xml中的全局配置 -->
<settings>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/> <!-- 按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

二、缓存

  1、一级缓存

  一级缓存即SqlSession缓存,mybatis是默认开启的,所以一般不需要我们刻意去维护

  2、二级缓存

  二级缓存是Mapper级别的缓存,是可以跨SqlSession的;二级缓存的使用是需要我们自己在配置文件中手动开启,具体如下:

  先在SqlMapConfig中进行配置,代码如下:

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

  然后在需要使用二级缓存的mapper的配置文件中开启二级缓存,代码如下

<!-- 开启当前mapper下的二级缓存 -->
<cache/>
<!-- 注意,cache标签可以继续配置用于实现二级缓存的整合,即不用mybatis提供的二级缓存用第三方的 -->

  最后,二级缓存中调用的javabean需要实现序列化(Serializable)接口,这是为了将缓存数据取出执行反序列化操作,因为二级缓存数据的存储地不一定全部在内存

  注意:缓存开启的过程中,如果一旦进行了事务的commit操作,即对数据库进行了增删改,那么为了避免脏数据的出现,默认情况下是会刷新缓存区域的(即清空缓存)

Mybatis学习笔记三的更多相关文章

  1. MyBatis学习笔记(三) 关联关系

    首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...

  2. MyBatis学习笔记(三) Configuration类

    一.初探Configuration类 我们先来看一下MyBatis的XML配置文件的结构,(摘自mybatis.org) 下面这个是Configuration类的部分变量 一点不一样是不是??? 其实 ...

  3. mybatis学习笔记三(关联关系)

    学习mybatis的关联关系,主要注解在代码上,这里不做解释.配置文件一样的就不贴了 1.关联关系表创建(学生对应老师 多对一) 学生老师表 2.表对应的实体类 package com.home.en ...

  4. Mybatis学习笔记(三) —— DAO开发方法

    一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...

  5. mybatis学习笔记(三)-- 优化数据库连接配置

    原来直接把数据库连接配置信息写在conf.xml配置中,如下 <?xml version="1.0" encoding="UTF-8"?> < ...

  6. MyBatis学习笔记(三)——优化MyBatis配置文件中的配置

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264301.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的 ...

  7. mybatis 学习笔记(三):mapper 代理开发 dao 层

    mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...

  8. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  9. Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)

    一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...

随机推荐

  1. win10系统安装labelImg

    网站:https://github.com/tzutalin/labelImg conda install pyqt=4 pyrcc4 -o resources.py resources.qrc py ...

  2. 深入解析 composer 的自动加载原理 (转)

    深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...

  3. node模块之path——path.join和path.resolve的区别

    1.path.join([...paths]) path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径. 长度为零的 path 片段会被忽略. 如果 ...

  4. mybatis使用@param("xxx")注解传参和不使用的区别

    public interface SystemParameterMapper { int deleteByPrimaryKey(Integer id); int insert(SystemParame ...

  5. python 日期操作【转】

    SQLite中的时间日期函数这是我学习SQLite时做的笔记,参考并翻译了Chris Newman写的<SQLite>中的<Working with Dates and Times& ...

  6. PHP函数总结(个人版)

    ($saying[$key][, , 'utf-8'); 1.//mb_substr() string mb_substr ( string $str , int $start [, int $len ...

  7. vuex状态持久化

    npm install vuex-persistedstate 在store.js里 import createPersistedState from 'vuex-persistedstate' co ...

  8. Linux只下载不安装软件包

    有时我们并不需要安装软件而只要下载软件包. 包格式 命令 命令所属包 命令下载格式 rpm yumdownloader yum-utils yumdownloader package_name deb ...

  9. hive top n

    hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法 hive中一般取top n时,row_number(),rank,dense_ran()这三个函数就派 ...

  10. oracle的case when的用法和decode函数的用法

    oracle中,我们要使用case when时,要怎样使用 如下测试数据,我要把ClassId 的1变成一班,2变成二班,3变成三班,那sql要怎样写呢? 1.case when的用法 -- orac ...