今天就跟大家聊聊有关Mybatis框架的作用有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强> Mybatis基本架构强>
Mybatis的源码应该算是比较容易阅读的,首先Mybatis核心功能就是执行Sql语句,但在其基础上又有许多增强的地方(动态Sql, ORM等)。看一个框架的时候,第一步是对整个框架有一个大体的了解。例如Mybatis,我们可以从初始化到完成一个Sql请求为主线,看一下涉及了哪些类。我个人总结了一下,Mybatis的框架主要的核心类有4个
<强>配置强>
配置就是用于解析,保存,处理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。
<强>执行人强>
前面说了SqlSession只是一个门面类,遗嘱执行人才是负责Sql语句执行的。因此遗嘱执行人才是整个Mybatis核心.Executor的实现类有
- <李>
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框架的作用有哪些