Mybatis持久层

1、mybatis插件机制

插件

MyBatis所述的插件功能,其实就是一个拦截器功能。

概述

1、在四大对象创建的时候,每个创建出来的对象不是直接返回的,而是通过interceptorChain.pluginAll(parameterHandler)返回的。 

2、pluginAll获取到所有的Interceptor(拦截器)(插件需要实现的接口),调用Interceptor.pluginAll(target),返回target被包装后的对象。 

3、插件机制:我们可以使用插件为目标对象创建一个代理对象:AOP(面向切面) 

我们的插件可以为四大对象创建出代理对象,代理对象就可以拦截四大对象的每一个执行(方法)。

 public Object pluginAll(Object target) {

    for (Interceptor interceptor : interceptors) {

      target = interceptor.plugin(target);

    }

    return target;

 }

插件机制的实现主要分为以下几步:

Configuration初始化期间解析Plugins标签加入拦截链InterceptorChain

执行SQL过程中在Executor,ParameterHandler初始化的时候调用pluginAll()方法生成相应的代理类;

执行Executor,ParameterHandler等类的方法时候会执行相应的代理类的方法;

在调用pluginAll()方法生成代理类的时候会遍历拦截链列表中所有的拦截器,层层嵌套生成代理类;配置文件中越靠下的插件配置,越在嵌套代理类的外层;

层层代理会影响系统性能,因此要减少没有必要的代理;

2、mybatis主键和其它索引的数据结构有什么区别?

普通索引:最基本的索引,没有任何限制

唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。

主键索引:它 是一种特殊的唯一索引,不允许有空值。

全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。

组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。

MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。

InnoDB的数据文件本身就是索引文件。InnoDB的辅助索引data域存储相应记录主键的值而不是地址。

聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

数据结构不取决于索引。。取决于引擎。。现在大部分都是B-Tree和B+Tree。

3、mybatis的原理?

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情:

1. 封装JDBC操作

2. 利用反射打通Java类与SQL语句之间的相互转换

MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。

Mybatis 的运行过程:

1. 读取配置文件创建 Configuration 对象, 用以创建 SqlSessionFactroy.

2. SQLSession 的执行过程.

猜你喜欢

转载自blog.csdn.net/qq_39159227/article/details/89036003