下载Mybatis的源码 打开浏览器输入网址https://github.com/mybatis/mybatis-3即可访问Mybatis在Github中的仓库。 截止到目前为止,mybatis的最新版本是3.5.3-SNAPSHOT,但是因为我之前学习过程中使用的版本是3.5.0-SNAPSHOT,因此这篇笔记还是针对3.5.0-SNAPSHOT来写。 依赖环境的安装 jdk(1.8+) 因为m
主要内容:1.MyBatis缓存介绍,2.二级缓存问题,3.关联缓存刷新实现,4.验证1.MyBatis缓存介绍 Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只开启一级缓存,二级缓存需要手动开启。 一级缓存只是相对于同一个SqlSession而言。 也就是针对于同一事务,多次执行同一Mapper的相同查询方法,第一查询后,MyBatis会将查询结果放入缓存,在中间不涉及相应Mapper的数据更新(Insert,Update和Delete)操作的情况下,后续的查询将
主要内容:1.前言,2.源码分析,3.使用方法,4.总结1.前言 1.1 Mybatis四大对象 org.apache.ibatis.executor.parameter.:处理SQL的参数对象 org.apache.ibatis.executor.resultset.:处理SQL的返回结果集 org.apache.ibatis.executor.statement.:数据库的处理对象,用于执行SQL语句 org.apache.ibatis.execu
主要内容:1.方法 foreach 批量插入,2.方法 ExecutorType.BATCH 批量插入,3.总结1.方法 foreach 批量插入 由于项目的代码不可以外泄。一下是模拟的代码。 这个方法提升批量插入速度的原理是,将传统的: 转化为: 乍看上去这个foreach没有问题,但是经过项目实践发现,当表的列数较多(20+),以及一次性插入的行数较多(5000+)时,整个插入的耗时十分漫长,达到了14分钟 默认执行器类型为Simple,会为每个语句创建一个新的预处理语句,也就是创建一个Pr
#{}速度快,能防止sql注入,是占位符方式,先预编译,然后填充参数,字符串格式,用户名=(___),参数只是下划线上的内容 ${}是直接拼接到语句上,这种方式需要自己拼括号和参数,但是也可以拼接想执行的任何语句,也就是传说中的sql注入 详情如下 在MyBatis中使用参数进行SQL拼装经常会使用到#{var}和${var}两种参数的设置方式。下面是两种方式的不用之处: #{var} 使用预编译
主要内容:1. 概述,2. ClassLoaderWrapper,3. Resources,4. ResolverUtil,5. VFS1. 概述 资源加载模块,主要是对类加载器进行封装,确定类加载器的使用顺序,并提供了加载类文件以及其他资源文件的功能 。 2. ClassLoaderWrapper org.apache.ibatis.io.ClassLoaderWrapper ,ClassLoader 包装器。可使用多个 ClassLoader 加载对应的资源,直到有一成功后返回资源。 2.1
主要内容:1. 概述,2. TypeHandler,3. TypeReference,4. 注解,5. JdbcType,6. TypeHandlerRegistry1. 概述 ① MyBatis 为简化配置文件提供了别名机制,该机制是类型转换模块的主要功能之一。 ② 类型转换模块的另一个功能是实现 JDBC 类型与 Java 类型之间的转换,该功能在为 SQL 语句绑定实参以及映射查询结果集时都会涉及: 在为 SQL 语句绑定实参时,会将数据由 Java 类型转换成 JDBC 类型。 而在映射
主要内容:1. 概述,2. LogFactory,3. Log1. 概述 无论在开发测试环境中,还是在线上生产环境中,日志在整个系统中的地位都是非常重要的。良好的日志功能可以帮助开发人员和测试人员快速定位 Bug 代码,也可以帮助运维人员快速定位性能瓶颈等问题。目前的 Java 世界中存在很多优秀的日志框架,例如 Log4j、 Log4j2、Slf4j 等。 MyBatis 作为一个设计优良的框架,除了提供详细的日志输出信息,还要能够集成多种日志框架,其日志
主要内容:1. 概述,2. Cache,3. CacheKey1. 概述 在优化系统性能时,优化数据库性能是非常重要的一个环节,而添加缓存则是优化数据库时最有效的手段之一。正确、合理地使用缓存可以将一部分数据库请求拦截在缓存这一层。 MyBatis 中提供了一级缓存和二级缓存,而这两级缓存都是依赖于基础支持层中的缓 存模块实现的。这里需要读者注意的是,MyBatis 中自带的这两级缓存与 MyBatis 以及整个应用是运行在同一个 JVM 中的,共享同一块堆
主要内容:1. 概述,2. Transaction,3. TransactionFactory1. 概述 MyBatis 对数据库中的事务进行了抽象,其自身提供了相应的事务接口和简单实现。 在很多场景中,MyBatis 会与 Spring 框架集成,并由 Spring 框架管理事务 2. Transaction org.apache.ibatis.transaction.Transaction ,事务接口。代码如下: 2.1 JdbcTransaction org.apache.ibati
主要内容:1.概述,2. exceptions 包,3. 其它包1.概述 定义了 MyBatis 专有的 PersistenceException 和 TooManyResultsException 异常。 2. exceptions 包 2.1 IbatisException org.apache.ibatis.exceptions.IbatisException ,实现 RuntimeException 类,IBatis 的异常基类。代码如下: 实际上,I
主要内容:1.概述,2. Reflector,3. ReflectorFactory,4. Invoker,5. ObjectFactory,6. Property 工具类,7. MetaClass,8.ParamNameResolver1.概述 Java 中的反射虽然功能强大,但对大多数开发人员来说,写出高质量的反射代码还是 有一定难度的。MyBatis 中专门提供了反射模块,该模块对 Java 原生的反射进行了良好的封装,提了更加简洁易用的 API,方便上层使调用,并且对反射操作进行了一系列
主要内容:1.概述,2. XPathParser,3. XMLMapperEntityResolver,4. GenericTokenParser,5. PropertyParser,6. TokenHandler1.概述 解析器模块,主要提供了两个功能: 一个功能,是对 XPath 进行封装,为 MyBatis 初始化时解析 mybatis-config.xml 配置文件以及映射配置文件提供支持。 另一个功能,是为处理动态 SQL 语句中的占位符提供支持。 源码对应 parsing 包。 2.
主要内容:1.概述1.概述 MyBatis 的整体架构分为三层: 基础支持层 核心处理层 接口层 2 基础支持层 2.1 反射模块 对应 reflection 包。 Java 中的反射虽然功能强大,但对大多数开发人员来说,写出高质量的反射代码还是 有一定难度的。MyBatis 中专门提供了反射模块,该模块对 Java 原生的反射进行了良好的封装,提了更加简洁易用的 API,方便上层使调用,并且对反射操作进行了一系列
一直以来感觉使用Mybatis查询存储过程很蹩脚,不知道有没有人和我感觉一样。写了一个拦截器,可以把储存过程的输出参数当做返回值来返回。其实也简单不了多少,只不过在设计Dao接口的时候能更统一吧。 使用方式可以看一下这里