Mabitys总结

一、ORM

ORM(Object/Relation Mapping),中文名称:对象/关系 映射。是一种解决数据库发展和面向对象编程语言发展不匹配问题而出现的技术。

使用JDBC技术时,手动实现ORM映射:

Mabitys总结_第1张图片

使用ORM时,自动关系映射:

(1)ORM的具体实现可以认为是一个整体。

(2)SQL执行结果后,如果执行的是增删改,不需要去编写拆卸对象的代码,而是由ORM把对象中属性值取出放入到SQL中。

(3)SQL执行结果后,如果执行的是查询,会由ORM将数据库中查询到的结果,转换为对象。

(4)ORM技术相当于一个转换器,是面向对象语言和数据库之间的纽带。

(5)ORM框架封装了对象/关系的自动映射。

Mabitys总结_第2张图片

MyBatis:目前使用最多的ORM框架。

二、Mybatis中的SQL语句中的参数

1.MyBatis中最常用的占位符为 #{}。

        1.SQL语句中使用#{}获取Test类中传递过来的参数值。

        2. 当参数对象类型时,可以使用#{对象中属性名}获取对象属性值。

2.${} 的使用

${}在被MyBatis进行解析时,不会解析为占位符,而是直接解析成对应的值。也就是说使用${}时有点类似字符串拼接,会有SQL注入问题。 但是使用${}可以动态设置列名或表名。

3.#{}和${}的区别(经典面试题)

#{}被解析为?,用在设置列的值或条件值时,也可以使用在分页等需要设置具体值的情况。

${}表示字符串拼接,用在动态设置表名和动态设置列名的情况下。

三、MyBatis中DQL操作

yBatis的DQL操作在映射文件都是通过 select d_id,d_name,e_id,e_name,e_d_id from dept d,emp e where d.d_id=e.e_d_id

3. N+1查询方式

N+1查询方式命名由来:当查询Emp表中N条数据时,需要编写1条查询全部的SQL和N条根据外键列值作为另一张表主键查询条件的N条SQL语句。


    
    






    
    
    
    
    
    


九、延迟加载(面试题)

延迟加载只能出现在多表联合查询的N+1方式中。表示当执行当前方法时,是否立即执行关联方法的SQL。

配置延迟加载:

         全局配置。整个项目所有N+1位置都生效。

           局部配置。只配置某个N+1位置。

两种方式需要选择其中一种,如果两种方式都使用了,局部配置方式生效。

1.全局配置方式


    

2.局部配置方式

局部配置方式需要在collection或association标签中配置fetchType属性。fetchType可取值:lazy(延迟加载)和earge(立即加载)。

当配置了fetchType属性后,全局settings的配置被覆盖,对于当前标签以fetchType属性值为准。

十、缓存(面试题)

1. 缓存介绍

MyBatis的缓存将相同查询条件的SQL语句执行一遍后所得到的结果存在内存或者某种缓存介质当中,当下次遇到一模一样的查询SQL时候不在执行SQL与数据库交互,而是直接从缓存中获取结果。

MyBatis分为一级缓存和二级缓存,同时也可配置关于缓存设置。

  1. 一级存储是SqlSession上的缓存。

  2. 二级缓存是在SqlSessionFactory(namespace)上的缓存。

  3. 默认情况下,MyBatis开启一级缓存,没有开启二级缓存。当数据量大的时候可以借助一些第三方缓存框架或Redis缓存来协助保存Mybatis的二级缓存数据。

2. 一级缓存

一级缓存想要生效,必须同时满足3个条件:

        1. 同一个SqlSession对象。

        2. 同一个select标签。本质为底层同一个JDBC的Statemen对象。

        3. 完全相同的SQL,包含SQL的参数值也必须相同。

        4. insert、delete、update操作会清空一级缓存数据。

        5. close(),commit也会清空缓存。

2.1 一级缓存流程图

命中缓存:从Map中查询是否存在指定key。如果存在表示命中缓存,如果不存在这个key,需要访问数据库。

更新到缓存:把查询结果put到map中。

Mabitys总结_第3张图片

3. 二级缓存

3.1 二级缓存介绍

 二级缓存是以namespace为标记的缓存,可能要借助磁盘,磁盘上的缓存,可以由一个SqlSessionFactory创建的SqlSession之间共享缓存数据,默认并不开启。

二级缓存生效条件:

  1. 同一个SqlSessionFactory对象。

  2. 同一个方法(