任何一个技术都不能浅尝辄止,今天作者就带大家深入底层源码看一看Mybatis的基础架构。此篇文章只是源码的入门篇,讲一些Mybatis中重要的组件,作者称之为六剑客。
环境版本
- 本篇文章讲的一切内容都是基于Mybatis3.5和SpringBoot-2.3.3.RELEASE。
Myabtis的六剑客
- 其实Mybatis的底层源码和Spring比起来还是非常容易读懂的,作者将其中六个重要的接口抽离出来称之为Mybatis的六剑客,分别是SqlSession、Executor、StatementHandler、ParameterHandler、ResultSetHandler、TypeHandler。
- 六剑客在Mybatis中分别承担着什么角色?下面将会逐一介绍。
- 介绍六剑客之前,先来一张六剑客执行的流程图,如下:
SqlSession
- SqlSession是Myabtis中的核心API,主要用来执行命令,获取映射,管理事务。它包含了所有执行语句、提交或回滚事务以及获取映射器实例的方法。
有何方法
- 其中定义了将近20个方法,其中涉及的到语句执行,事务提交回滚等方法。下面对于这些方法进行分类总结。
语句执行方法
- 这些方法被用来执行定义在 SQL 映射 XML 文件中的 SELECT、INSERT、UPDATE 和 DELETE 语句。你可以通过名字快速了解它们的作用,每一方法都接受语句的 ID 以及参数对象,参数可以是原始类型(支持自动装箱或包装类)、JavaBean、POJO 或 Map。
<T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
<T> Cursor<T> selectCursor(String statement, Object parameter)
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)
- 其中的最容易误解的就是selectOne和selectList,从方法名称就很容易知道区别,一个是查询单个,一个是查询多个。如果你对自己的SQL无法确定返回一个还是多个结果的时候,建议使用selectList。
- insert,update,delete方法返值是受影响的行数。
- select还有几个重用的方法,用于限制返回行数,在Mysql中对应的就是limit,如下:
<E> List<E> selectList (String statement, Object parameter, RowBounds rowBounds)
<T> Cursor<T> selectCursor(String statement, Object parameter, RowBounds rowBounds)
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowbounds)
void select (String statement, Object parameter, ResultHandler<T> handler)
vo