Mybatis源码分析
Mybatis源码分析
一直不懂
笔记
展开
-
【Mybatis源码分析】13-记一次PageHelper reasonable参数使用不当造成的死循环
上一篇Mybatis源码分析刚讲过PageHelper分页机制https://blog.csdn.net/shenchaohao12321/article/details/80168655,但是没有分析reasonable参数,碰到这次自己遇上个坑总结一下。问题描述及原因使用Mybatis PageHelper插件做了表的分页查询,要求查询符合某一条件的所有记录做处理,就写了一个迭代器在w...原创 2018-11-18 16:09:26 · 17495 阅读 · 0 评论 -
【Mybatis源码分析】12-插件PageHelper机制
PageInterceptor是Mybatis的插件,用于拦截Executor的query方法,增强这个方法用于分页查询。@Intercepts( { @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.cl...原创 2018-05-05 15:17:33 · 8027 阅读 · 0 评论 -
【Mybatis源码分析】11-插件机制
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setPar...原创 2018-05-02 23:53:04 · 4425 阅读 · 0 评论 -
【Mybatis源码分析】10-CglibProxyFactory
Mybatis懒加载是通过动态代理完成的,通常来说Mybaits的映射实体都是POJO,所以Mybatis默认使用Cglib来做动态代理框架的。使用CglibProxyFactory的createProxy方法创建代理对象。其中又直接调用了EnhancedResultObjectProxyImpl静态createProxy方法。public Object createProxy(Object ta...原创 2018-05-02 23:52:42 · 4842 阅读 · 0 评论 -
【Mybatis源码分析】09-ResultSetHandler
ResultSetHandler提供了处理不同Statement的方法,我们这里分析最常用的handleResultSets。调用此方法将一个Statement对象转换为一个List对象。public List<Object> handleResultSets(Statement stmt) throws SQLException { ErrorContext.instance()...原创 2018-04-28 22:59:56 · 5846 阅读 · 0 评论 -
【Mybatis源码分析】08-SimpleExecutor的query分析
上一篇分析到如果二级缓存没有命中,则会调用一个Executor(默认是SimpleExecutor)的query方法,SimpleExecutor继承了BaseExecutor,直接调用BaseExecutor的query方法。BaseExecutor有一个PerpetualCache实例localCache(一级缓存,因为生命周期和executor一样)用于缓存查询结果。public <E...原创 2018-04-22 21:16:39 · 5233 阅读 · 2 评论 -
【Mybatis源码分析】07-SqlSession执行过程之二级缓存
DefaultSqlSession执行selectList方法内实际调用CachingExecutor的query方法,上篇文章分析过了BoundSql的获取过程,下面继续往下说一下二级缓存。public <E> List<E> query(MappedStatement ms, Object parameterObject, RowBounds rowBounds, Re...原创 2018-04-20 23:08:35 · 4618 阅读 · 0 评论 -
【Mybatis源码分析】06-SqlSession执行过程之获取BoundSql代理对象
上篇文章分析Mapper的查询操作最终都会调用SqlSession的selectList方法,接下来几篇文章分析一下DefaultSqlSession的selectList的执行过程。public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) { try {...原创 2018-04-20 15:29:27 · 7256 阅读 · 0 评论 -
【Mybatis源码分析】05-SqlSession执行过程之获取Mapper代理对象
当我们通过DefaultSqlSession的Mapper方式操作数据库时使用如下api:<T> T getMapper(Class<T> type);此方法返回一个实现了type接口的实现类的实力,我们分析一下此实力的创建过程。public <T> T getMapper(Class<T> type) { return conf...原创 2018-04-18 22:15:16 · 5754 阅读 · 0 评论 -
【Mybatis源码分析】04-SqlSession的创建过程
SqlSession是我们操作数据库的主要客户端API,是由SqlSessionFactory的openSession方法所创建。openSession有多个重载方法,我们看一下:public interface SqlSessionFactory { SqlSession openSession(); SqlSession openSession(boolean autoCommi...原创 2018-04-14 22:44:48 · 4613 阅读 · 0 评论 -
【Mybatis源码分析】03-DataSourceFactory与DataSource
Mybatis中DataSourceFactory是负责创建DataSource对象的,Mybatis一共为我们提供了3种DataSourceFactory的实现,不同的DataSourceFactory创建不同的DataSource,分别为UnpooledDataSourceFactory,PooledDataSourceFactory和JndiDataSourceFactory。具体使用哪种D...原创 2018-04-12 00:39:21 · 6598 阅读 · 0 评论 -
【Mybatis源码分析】02-Mapper映射的解析过程
上一篇我们讲解到mapperElement方法用来解析mapper的,我们以packae属性为例详细分析一下:private void mapperElement(XNode parent) throws Exception { if (parent != null) { for (XNode child : parent.getChildren()) { ...原创 2018-04-07 14:14:43 · 5443 阅读 · 0 评论 -
【Mybatis源码分析】01-SqlSessionFactory的创建过程
我们使用mybatis操作数据库都是通过SqlSession的API调用,而创建SqlSession是通过SqlSessionFactory。下面我们就通过一个例子看看SqlSessionFactory的创建过程。public class TestEntity { private long id; private String name; private Date d...原创 2018-03-28 23:06:17 · 4903 阅读 · 0 评论