Mybatis框架的作用有哪些

  介绍

今天就跟大家聊聊有关Mybatis框架的作用有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强> Mybatis基本架构

Mybatis的源码应该算是比较容易阅读的,首先Mybatis核心功能就是执行Sql语句,但在其基础上又有许多增强的地方(动态Sql, ORM等)。看一个框架的时候,第一步是对整个框架有一个大体的了解。例如Mybatis,我们可以从初始化到完成一个Sql请求为主线,看一下涉及了哪些类。我个人总结了一下,Mybatis的框架主要的核心类有4个

 Mybatis框架的作用有哪些

<强>配置

配置就是用于解析,保存,处理Mybatis的配置内容,包括了

<李>

Mybatis基本配置,例如支持数据库中的字段支持下标转驼峰mapUnderscoreToCamelCase=true等等,参看Mybatis配置说明

<李>

SqlMapper管理,也就是通过xml或者注解写的一些Sql映射。相关的类可以查看源码中MappedStatement类。

<李>

创建类,还配置有一些创建类的功能,例如遗嘱执行人,StatementHandler。这个2个类后面还会说到

<强>小节配置

总结配置的功能,当然,如何读取和解析相关文件是配置中大部分代码做的事。这些都是为了准备后面Mybatis运行的基本条件.Configuration中创建类是因为创建的这些类都依赖于配置(但这样做数据和逻辑没有做到分离)。

<强> SqlSession

SqlSession可能是Mybatis中我们最常用的类,其实他是一个门面类,直接对外提供服务

public  interface  SqlSession  extends  Closeable  {   ,& lt; T> T  selectOne (String 声明);   ,& lt; E> List, selectList (String 声明,Object 参数);   ,int 删除(String 声明);   ,void  rollback ();   ,void  commit ();   ,……      }

这些方法都是直接提供给外部调用的。看到这些方法是不是很亲切。(我个人在看源码的时候看到一些自己用过的一些类或方法的时候都有种莫名的亲近感。感觉终于和我的认知世界有交集了)

<强> SqlSession的创建

SqlSessionFactor是用于创建SqlSession建造者,提供给外部快速创建一个SqlSession。是一个工厂类,而SqlSessionFactor的创建则是由SqlSessionFactorBuilder。

 Mybatis框架的作用有哪些

<强>执行人

前面说了SqlSession只是一个门面类,遗嘱执行人才是负责Sql语句执行的。因此遗嘱执行人才是整个Mybatis核心.Executor的实现类有

 Mybatis框架的作用有哪些

<李>

BaseExecutor:看名字知道是最基础执行者,其他的遗嘱执行人都和这个类有一定的关系

<李>

CachingExecutor:每次查询的时候会先从缓存中获取,每次有增删改的时候会让缓存失效.CachingExecutor其实是一个代理内,内部代理了BaseExecutor(或其子类)。在BaseExecutor基础上增加了缓存操作。

<强>相关类

我们看一个执行人参数最多的一个方法

& lt; E>, List,查询(MappedStatement 女士,Object 参数,,RowBounds  rowBounds,, ResultHandler  resultHandler,, CacheKey  cacheKey,, BoundSql  boundSql), throws  SQLException。

这些类都对执行Sql有一定关系

<强> MappedStatement

具体点来理解就是我们定义的Sql映射语句,例如我们xml定义的:

& lt; select  id=皊electCountByPath", parameterType=癹ava.lang.String", resultType=癹ava.lang.Long"比;   ,select 计数(1),得到配置   ,WHERE  path =, # {path}   & lt;/select>

<强> paramter

这个就是传递给sql映射的参数,用于生成和填充动态sql语句

<强> RowBound

限定一次查询数据量,类很简单,看代码就明白,不多说

public  class  RowBounds  {   ,public  static  final  int  NO_ROW_OFFSET =, 0;   ,public  static  final  int  NO_ROW_LIMIT =, Integer.MAX_VALUE;   ,public  static  final  RowBounds  DEFAULT =, new  RowBounds ();   ,private  int 补偿;   ,private  int 限制;   ,public  RowBounds (), {=,,this.offset  NO_ROW_OFFSET;=,,this.limit  NO_ROW_LIMIT;   ,}   ,public  RowBounds (int ,抵消,int 限制),{=,this.offset 补偿;=,this.limit 限制;   ,}   }

Mybatis框架的作用有哪些