一、延迟加载

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

  需要注意的是,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. p1530 Fractions to Decimals

    将余数记录下来,如果余数相同,那么商的下一位也相同. #include <iostream> #include <cstdio> #include <cmath> ...

  2. 使用VisualStudio进行脚本|样式文件压缩

    在vs的Optimization中有个Bundle是专门用来压缩样式和脚本文件 .他有两个继承:StyleBundle.ScriptBundle,从名字上就可看出,StyleBundle专门压缩样式文 ...

  3. Django 权限管理(二)

    权限菜单展示 1.展示的效果 实现该效果,涉及到的核心点(突破点) 1. 权限分类: (1)菜单权限 (主要用来展示的权限(url)如查看权限 url,  如上图中的每个权限都归类为菜单权限,主要用来 ...

  4. QQ企业邮箱接口

    我推荐的这篇文章很好:http://wenku.baidu.com/link?url=KQIMyrECGb8GS_0fag4PRG64M8Z7wOLbsU1f3BhydXAyYJDC2JMHEuVcy ...

  5. gleez框架获得时间控件

    1,首先你要在你的页面上引用一个js <script src="<?php echo URL::base() ?>media/vendor/datepicker/Wdate ...

  6. mfscli的使用方法(解决mfscgi响应慢的问题)

    在moosefs中,mfscgi是一个python写的server程序,其中的数据是调用同样的python工具mfscli实现的. 每当用浏览器打开mfscgi的时候,它要把所有的表数据请求一遍,非常 ...

  7. 百度AI认为最漂亮的中国女星是----范冰冰

    一.程序说明 1.1 程序说明 之前写调用百度AI接口的程序,然后刷到了两条明星的新闻,就想到了写个给明星颜值排下名的程序. 程序的关键点是两个,第一个是百度AI接口的调用这点其实直接使用早前实现的类 ...

  8. httpd.conf文件格式解析

    apache http server,俗称apache,程序名httpd,默认配置文件/etc/httpd/conf/httpd.conf:该文件通过其中的Include conf.d/*.conf指 ...

  9. Spring控制反转(依赖注入)的最简单说明

    1.常规方式实现实例化 1.1已有角色如下: 一个接口Interface,两个接口实现类InstatnceA.InstanceB,一个调用类User 1.2当前实例化InstanceA如下: Inte ...

  10. MFC CDHtmlDialog 加载本地资源

    步骤:1.资源视图 项目右击选择资源添加,自定义添加新类型 如:JS(会增加JS文件夹)2. 选择1新建的文件夹右击 添加资源 导入 选择js文件引入3. 在资源文件Resource.h文件夹能找到资 ...