
MyBatis
文章平均质量分 89
MyBatis源码分析
我只是有点困呦
比较懒
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
11.插件
1.Mybatis插件概述插件机制是为了对MyBatis现有体系进行扩展 而提供的入口。底层通过动态代理实现。可供代理拦截的接口有四个:Executor:执行器StatementHandler:JDBC处理器ParameterHandler:参数处理器ResultSetHandler:结果集处理器这四个接口已经涵盖从发起接口调用到SQl声明、参数处理、结果集处理的全部流程。接口中任何一个方法都可以进行拦截改变方法原有属性和行为。不过这是一个非常危险的行为,稍不注意就会破坏MyBatis核心逻原创 2021-10-24 22:34:00 · 218 阅读 · 0 评论 -
10.结果集映射
1 ResultSetHandler简介处理Statement执行后产生的结果集,生成结果列表处理存储过程执行后的输出参数public interface ResultSetHandler { // 将Statement执行后产生的结果集(可能有多个结果集)映射为结果列表 <E> List<E> handleResultSets(Statement var1) throws SQLException; <E> Cursor<E&g原创 2021-10-24 22:33:08 · 812 阅读 · 0 评论 -
9.MetaObject
1.MetaObject功能MetaObject类相当于一个工具类,Mybatis在sql参数设置和结果集映射里经常使用到这个对象。映射是指结果集中的列填充至JAVA Bean属性。这就必须用到反射,而Bean的属性 多种多样的有普通属性、对象、集合、Map都有可能。为了更加方便的操作Bean的属性,MyBatis提供了MeataObject 工具类,其简化了对象属性的操作。其具体功能如下:查找属性:勿略大小写,支持驼峰、支持子属性 如:blog.comment.user_name(需要开启use原创 2021-09-21 23:39:03 · 2059 阅读 · 0 评论 -
8.ParameterHandler
1.JDBC参数处理使用JDBC操作数据库时,以PreparedStatement为例:PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(0, 0);statement.setByte(1, (byte) 0);statement.setBoolean(2, false);statement.setBigDecimal(3, new BigDecimal(25000.98));stat原创 2021-09-21 23:41:02 · 455 阅读 · 0 评论 -
7.StatementHandler
1.StatementHandler概要MyBatis一个基于JDBC的Dao框架,会话、执行器半点没有提到jdbc,原因是MyBatis把所有跟JDBC相关的操作全部都放到了StatementHandler中。一个SQL请求会经过会话,然后是执行器,最由StatementHandler执行jdbc最终到达数据库。其关系如下图:这里要注意这三者之间比例是1:1:n。也就是说多个SQL操作对应一个会话,和唯一的执行器以及N个StatementHandler。这里的N取决于通过会话调用了多少次Sql(命原创 2021-09-21 23:39:57 · 523 阅读 · 0 评论 -
6.二级缓存
1.二级缓存概述前一章节介绍了一级缓存即会话级别的缓存,同一个会话SqlSession才能共享缓存。如果多个 SqlSession 需要共享缓存,则需要开启二级缓存,开启二级缓存后,会使用 CachingExecutor 装饰 Executor,进入一级缓存的查询流程前,先在CachingExecutor 进行二级缓存的查询。二级缓存也称作是应用级缓存,与一级缓存不同的,是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改较少的数据。在流程上是先访问二级缓存,再访问原创 2021-09-05 00:50:51 · 1271 阅读 · 0 评论 -
5.一级缓存
1.mybatis 缓存概述myBatis中存在两个缓存,一级缓存和二级缓存。一级缓存:也叫做会话级缓存,生命周期仅存在于当前会话,不可以直接关闭。但可以通过flushCache和localCacheScope对其做相应控制。二级缓存:也叫应用级性缓存,缓存对象存在于整个应用周期,而且可以跨线程使用。关于二级缓存将在后续章节,详细说明。文本先聚焦一级缓存。首先来看如何才能命中一级缓存。2.一级缓存的存储形式一级缓存是以Map形式存在的key-value。存在于BaseExecutor的局部变原创 2021-09-05 00:46:56 · 423 阅读 · 0 评论 -
4.Executor执行器
1.Executor 主体结构Executor是MyBatis执行者接口,执行器的功能包括:基本功能:改、查,没有增删的原因是,所有的增删操作都可以归结到改。缓存维护:这里的缓存主要是为一级缓存服务,功能包括创建缓存Key、清理缓存、判断缓存是否存在。事物管理:提交、回滚、关闭、批处理刷新。Executor 的生命周期和 SqlSession 是一样的,之所以要明确的指出这一点是因为 Executor 中包含了缓存的处理,并且因为 SqlSession 是线程不安全的。对于这个接口MyBat原创 2021-09-05 00:46:35 · 953 阅读 · 0 评论 -
3.sqlSession
1.SqlSessionFactorySqlSessionFactory是MyBatis的关键对象。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。同时SqlSessionFactory也原创 2021-09-05 00:42:59 · 802 阅读 · 0 评论 -
2.configuration解析
1. 配置文件初始化mybatis 中包含了很多的配置项,具体每一项的讲解 官网 也很详细,对配置项解析后由Configuration 类维护configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境配置)environment(环境变量)transactionManager(事务管理器)da原创 2021-09-05 00:42:30 · 2183 阅读 · 0 评论 -
1.mybatis结构总览
1、mybatis简单 demo@Beforepublic void beforeMybatis() throws IOException { String resource = "com/scarecrow/mybatis/config/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); Properties properties = new Properties()原创 2021-09-05 00:41:56 · 272 阅读 · 0 评论