又见mybaits之selectall源码解析
Posted cnbk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了又见mybaits之selectall源码解析相关的知识,希望对你有一定的参考价值。
一、前言
作为一个小菜鸟对于mybatis的理解一致处于仅会用,典型的API程序员,今天正好有功夫,就稍微的解读一下源码,嘿嘿嘿~
首先我们先创建maven,引入mybatis和mysql链接包巴拉巴拉巴~~~
不详说,太复杂,不是今天的核心。
我们从这里入手,查看实现。
第一个有趣点来了,我发现这里有一顿套娃,疯狂调用本class的方法,换言之,这里本来有很多参数,但是都设置了默认值,这些参数是什么,又默认了什么就是本次解析的核心了
二、参数
@Override public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) { try { MappedStatement ms = configuration.getMappedStatement(statement); return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER); } catch (Exception e) { throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e); } finally { ErrorContext.instance().reset(); } }
看到有三个参数,分别是statement,parameter,rowBounds;
我们只传入了statement
A parameter object to pass to the statement.
译文:要传递给语句的参数对象。
rowBounds 解释
Bounds to limit object retrieval
译文:限制对象检索的边界
三、默认值
rowBounds是一个default对象
public static final RowBounds DEFAULT = new RowBounds();
而 parameter 默认值为空
那么他是怎么获得对象呢?
查到最后传了一个
Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
传了一Object对象
吐了 看不懂 以后再说吧
以上是关于又见mybaits之selectall源码解析的主要内容,如果未能解决你的问题,请参考以下文章
Mybaits 源码解析 ----- 面试源码系列:Mapper接口底层原理(为什么Mapper不用写实现类就能访问到数据库?)
Mybaits 源码解析 ----- 全网最详细,没有之一:一级缓存和二级缓存源码分析
Mybaits 源码解析 ----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?
Mybaits 源码解析 ----- Select 语句的执行过程分析(下篇)(Mapper方法是如何调用到XML中的SQL的?)全网最详细,没有之一