
Mybatis源码分析
文章平均质量分 85
菜鸟+1024
这个作者很懒,什么都没留下…
展开
-
Mybatis源码分析十四之MyBatis-Spring整合
一、MyBatis-Spring MyBatis-Spring会将Mybatis无缝的接入到Spring容器中,也就是可以正常的使用Spring来管理Mybatis。先看一个整合demo。 @Configuration public class Configure { @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new Sql原创 2021-12-15 10:28:49 · 244 阅读 · 0 评论 -
Mybatis源码分析十三之DataSource
一、DataSourceFactory 本文简单分析一下,mybatis中数据源的实现逻辑,从配置来看,可以配置池化和非池化以及JNDI模式,也就是type=“POOLED|UNPOOLED|JNDI”,依旧从源码入手,回到Configuration解析中。解析dataSourceElement方法。 会根据配置好的type得到对应的DataSourceFactory工厂,通过DataSourceFactory工厂返回对应的数据源。mybatis配置了如下三种数据源工厂。 UnpooledDataSour原创 2021-12-14 15:24:57 · 1287 阅读 · 0 评论 -
Mybatis源码分析十二之Plugin插件
一、插件 Mybatis中允许我们在执行过程中,在一些节点处进行拦截,具体可以在如下对象的方法中进行拦截: Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandler (getParameterObject, setParameters) ResultSetHandler (handleResultSets, handleOutputParamet原创 2021-12-14 10:32:22 · 537 阅读 · 0 评论 -
Mybatis源码分析十一之SqlSource
一、SqlSource 在分析mapper映射文件解析时,我们只是整体介绍了mapper映射文件,而sql语句的解析过程没做进一步说明,分析中可知,用户编写的sql语句是存放在SqlSource对象中,但是语句中的参数怎么解析的、参数映射关系是怎么保存的以及动态sql是怎么实现的,将是本文的重点。 SqlSource是只有一个方法的简单接口。 public interface SqlSource { BoundSql getBoundSql(Object parameterObject); } 它有如原创 2021-12-13 16:46:21 · 1022 阅读 · 0 评论 -
Mybatis源码分析十之MapperProxy
一、MapperProxyFactory 在使用mybatis的时候,配置好对应文件,只需要调用接口方法就可以实现对数据库操作。接口本身是不可以直接使用的,需要有具体的实现类,在mybatis中我们不需要去编写具体的实现类,只需要编写对应的接口就行。到这里,估计大家都已猜出,mybatis用代理的方式为我们做了实现,所以本文会重点分析mybatis中代理的实现。 在SqlSession中有个getMapper(Class< T > type),我们只需要传递一个具体的接口,就可以得到其代理对象。原创 2021-12-10 14:41:58 · 1066 阅读 · 0 评论 -
Mybatis源码分析九之StatementHandler 二(ResultSetHandler)
一、ResultSetHandler ,回顾之前配置结果集的时候,有两种配置方式resultMap和resultType只能是二选一。resultType是一种简单模式,只需要配置类的全限定名或者别名即可,而resultMap则更加的灵活,可以进行复杂的映射,至于结果映射,mybatis又提供了三种映射等级NONE、PARTIAL 、FULL,默认是PARTIAL,可以通过autoMappingBehavior来全局配置,接下来我们就从源码来分析,这三种映射等级和两种配置方式在源码中的实现与不同。 结果集处原创 2021-12-10 10:45:31 · 451 阅读 · 0 评论 -
Mybatis源码分析八之StatementHandler一
一、StatementHandler 我们在分析Executor的最后发现,对数据库的实际操作都是通过StatementHandler来实现,本文接着Executor中调用StatementHandler开始分析,一步步的走向最底层。 public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql原创 2021-12-07 15:12:12 · 990 阅读 · 0 评论 -
Mybatis源码分析七之Cache缓存
一、一级缓存 我们知道mybatis的一级缓存是默认开启的,不需要配置,也没有相应的配置功能去关闭。所以有必要了解一级缓存的使用,以及实现原理,这样我们才能更好的使用其缓存机制。 前文分析知道,mybatis的缓存实现逻辑在Executor中实现的,所以这里我们还是要重新分析一下BaseExecutor中的query方法。 public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBou原创 2021-12-01 17:23:54 · 1041 阅读 · 0 评论 -
Mybatis源码分析六之Executor
一、Executor 前文分析了SqlSession,总的说来就是实现了数据库操作的增删改查方法,但是具体的调用都是通过Executor来实现的,所以分析Executor对了解Mybatis是怎么运行极其重要。 Executor是SqlSession的构造参数之一,他的实例化过程是调用Configuration的newExecutor方法返回的Executor executor = configuration.newExecutor(tx, execType),tx是事务工厂(已经介绍过),execType原创 2021-12-01 10:48:03 · 573 阅读 · 0 评论 -
Mybatis源码分析五之SqlSession
一、SqlSession 第一节我们知道,Mybatis执行sql语句的时候都是通过SqlSession来执行的,从第二节我们分析了SqlSessionFactory,也就是不断的产生SqlSession的工厂类,只需要调用其openSession方法即可。 private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {原创 2021-11-29 16:58:01 · 230 阅读 · 0 评论 -
Mybatis源码分析四之Mapper映射文件解析过程
一、Mapper.xml解析 前文分析了Configuration的解析过程,本文接着前文继续分析mapper映射文件的解析过程,前文可知映射文件的解析过程是由XMLMapperBuilder来完成的,所以我们可以跟着起parse方法一探究竟。 public void parse() { //判断是否已经加载过 if (!configuration.isResourceLoaded(resource)) { //解析映射文件 configurationElement(par原创 2021-11-29 14:16:57 · 923 阅读 · 0 评论 -
Mybatis源码分析三之Configuration
一、Configuration Configuration对应的就是mybatis的配置文件,是mybatis的核心类之一,影响着mybatis的各种设置和运行行为,运行mybatis的第一步就是把配置文件转换成Configuration对象。 回到SqlSessionFactoryBuilder的build方法,configuration配置文件的解析是通过XMLConfigBuilder来实现。调用其parse()方法返回Configuration对象。 ...原创 2021-11-25 15:03:09 · 953 阅读 · 0 评论 -
Mybatis源码分析二之SqlSessionFactory
一、SqlSessionFactory 顾名思义就是不断地获取SqlSession的工厂,体现了一种简单工厂设计模式,从接口来看,里边重载了很多openSession方法,外加一个getConfiguration()获取Configuration配置类方法,并且只有一个默认实现类DefaultSqlSessionFactory。 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in); SqlSessionF原创 2021-11-24 11:25:44 · 497 阅读 · 0 评论 -
Mybatis源码分析一
一、数据库操作 传统方式: 加载驱动 创建连接(Connection) 创建Statement 执行SQL语句 处理结果集(ResultSet) 关闭连接 如果我们按照传统方式操作数据库,我们会不断的在2-6这几步来回的切换,会编写大量的重复性代码,极大地降低了开发效率。所以各种各样的持久层框架应运而生,本文将重点分析Mybatis这一个框架。 二、什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码原创 2021-11-24 09:34:52 · 113 阅读 · 0 评论