Mybatis核心知识点
一、初识Mybatis框架
二、Mybatis框架的原理
三、resultMap元素
resultMap的作用是定义映射规则、级联的更新、定制类型转化器等。resultMap定义的主要是一个结果集的映射关系,也就是SQL到Java Bean的映射关系的定义,它也支持级联等特性。
resultMap主要包含的元素有 constructor(配置构造方法)、id(表示哪个键是主键,允许有多个主键构成联合主键)、result(配置POJO到SQL列名的映射关系)、association和collection和discriminator(配置级联问题)。一条SQL语句执行后,就会返回结果,而结果可以使用map存储,也可以使用POJO 进行存储。
级联:
Mybatis中的级联分为三种:
①鉴别器(discriminator):它是一个根据某些条件决定采用具体实现类级联的方案,比如体检表要分性别去区分。
②一对一(association):比如学生证和学生就是一对一的关系,雇员和工牌就是一对一的级联。
③一对多(collection):比如班主任和学生就是一对多的关系。
在实际业务中,级联关系更为复杂,可以看下图的分析:

N+1问题与延迟加载
假设现在有N 个关联关系完成了级联,那么只要再加入一个关联关系,就变成了N+1个级联,所有的级联SQL都会被执行,这样显然造成了很多资源的浪费,这就是所谓的 N+1问题。为了应对这个问题,Mybatis提供了延迟加载的功能。即一次性地把常用的级联数据通过SQL直接查询出来,而对于那些不常用的级联数据不要取出,而是等待要用时才取出,这些不常用的数据可以采用延迟加载的功能。
在Mybatis的setting的配置中存在两个元素可以配置级联。
①lazyLoadingEnabled是延迟加载的开关。在开启时,所有的关联对象都会被延迟加载。在特定关联关系中,可以通过设置fetchType属性来覆盖该项的开关状态,默认值是false。
②aggressiveLazyLoading:当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载,反之,则每种属性按需加载。在版本3.4.1之前默认是true,后面默认是false。
四、Mybatis中的缓存
在Mybatis中允许使用缓存,缓存一般都放置在可高速读/写的存储器上,比如服务器的内存,它能有效提高系统的性能,因为数据库在大部分场景下时把存储在磁盘上的数据索引出来。
Mybatis中的缓存可以分为一级缓存和二级缓存。一级缓存是在SqlSession上的缓存,二级缓存是在SqlSessionFactory 上的缓存。默认情况下,即没有任何配置的情况下,Mybatis会默认开启一级缓存,这个缓存不需要POJO 对象可序列化(实现java.io.Serialization接口)。
Mybatis核心知识点的更多相关文章
- javascript中的一些核心知识点以及需要注意的地方
前言 近期杂事甚多,这些事情的积累对知识体系的提升有好处,但是却不能整理出来,也整理不出来 比如说我最近研究的Hybrid在线联调方案便过于依赖于业务,就算分享也不会有人读懂,若是抽一点来分享又意义不 ...
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...
- Java核心知识点学习----使用Condition控制线程通信
一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-> ...
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- mybatis的知识点
mybatis核心配置文件的配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...
- MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射
在上一章中我们学习了<MyBatis学习总结(一)——ORM概要与MyBatis快速起步>,这一章主要是介绍MyBatis核心配置文件.使用接口+XML实现完整数据访问.输入参数映射与输出 ...
- MyBatis核心配置文件详解
------------------------siwuxie095 MyBatis 核心配置文件详解 1.核心 ...
- Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- 1.2(Mybatis学习笔记)Mybatis核心配置
一.Mybatis核心对象 1.1SqlSeesionFactory SqlSessionFactory主要作用是创建时SqlSession. SqlSessionFactory可通过SqlSessi ...
随机推荐
- 二进制、十六进制理解及int类型二进制存储方式
二进制 0000 0000 0000 0000 0000 0000 0000 0001 // 2^0 0000 0000 0000 0000 0000 0000 0000 0010 // 2^1 00 ...
- Java工作流系统jflow从表功能介绍一
关键词:工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 bpm工作流系统 java工作流主流框架 自定义工作流引擎 表单设计器 流程设计器 从表也叫明细表, ...
- sql对于表格中列的删改
mysql与oracle char为定长字符串 var为可变字符串 修改表名:rename table1 to table2:(mysql) alter table1 rename to table2 ...
- PG数据库常用操作
全量迁移 备份数据 $ pg_dump -h 172.19.235.145 -U <username> -d <database> > 20180704_dbpe.sql ...
- Windows、Linux之间传输文件的几种方式
常见的文件传输协议有ftp.sftp,sftp就是在ftp的基础上对传输的数据进行了加密. ftp速度快,sftp速度略慢但安全性高. ftp默认使用21端口,sftp默认使用22端口. 我使用的是C ...
- Linux学习Day5:Vim编辑器、配置网卡、配置Yum软件仓库
今天首先学习Vim编辑器的使用,通过它可以对Linux系统的文件进行编写和修改.在Linux系统中一切都是文件,所以熟练掌握Vim编辑器的使用十分重要.最后通过配置主机网卡的实验,来加深Vim编辑器中 ...
- 第四次oo博客作业
(1)本单元是撰写UML数据分析器,架构大致如下,在指导书要求的函数外,对于UmlClass类,Umlinterface类,以及状态机,顺序图这四个类重现构造一个类,这个类里有他们所需要的全部信息,另 ...
- 深度(deepin)系统不能ssh root用户登录
vi /etc/ssh/sshd_config找到这一部分信息刚进去信息应该是这样 # Authentication: #LoginGraceTime 2m #PermitRootLogin proh ...
- udp socket 10054
udp socket 10054 在接收端没有启动的情况下 1.直接ReceiveFrom没问题. 2.如果先SendTo再ReceiveFrom,SendTo可以正常过,但是RecieveFrom会 ...
- java.math包下计算浮点数和整数的类
(1)BigIntege:实现任意精度的整数运算.(2)BigDecimal:实现任意精度的浮点运算. 例如: 使用BigDecimal进行浮点数比较 import java.math.BigDeci ...