![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MyBatis
文章平均质量分 92
程序员小潘
Java开发工程师,现居杭州,CSDN博客专家,热衷于分享计算机编程相关知识,欢迎关注~
展开
-
@MapperScan原理探究
MyBatis在整合Spring的时候,只需要加如下注解,就可以将Mapper实例注册到IOC容器交给Spring管理,它是怎么做到的呢???Mapper接口不能实例化,对象是怎么来的?Mapper接口没有加任何Spring相关注解,Spring凭什么管理这些Bean?原创 2022-12-17 12:13:32 · 2579 阅读 · 0 评论 -
MyBatis一级缓存源码分析
1. 前言为了提升持久层数据查询的性能,MyBatis提供了一套缓存机制,根据缓存的作用范围可分为:一级缓存和二级缓存。一级缓存默认是开启的,作用域为SqlSession,也称作【回话缓存/本地缓存】。二级缓存默认是关闭的,需要手动开启,作用域为namespace。本篇文章暂且不讨论二级缓存,仅从源码的角度分析一下MyBatis一级缓存的实现原理。我们已经知道,SqlSession是MyBatis对外提供的,操作数据库的唯一接口。当我们从SqlSessionFactory打开一个新的回话时,一个新的原创 2021-08-05 20:19:52 · 332 阅读 · 0 评论 -
数据库连接池PooledDataSource源码分析
1. 前言在数据持久层框架中,【数据源】是一个非常重要的组件,它的性能直接关系到整个数据持久层的性能。在Java中,数据源被定义为接口DataSource,源码如下:public interface DataSource extends CommonDataSource, Wrapper { // 获取数据库连接 Connection getConnection() throws SQLException; // 给定用户名,密码获取连接 Connectio原创 2021-08-03 19:32:09 · 2051 阅读 · 0 评论 -
DefaultParameterHandler源码分析
1. 前言前面的文章说过,MyBatis在执行SQL时,首先需要通过MappedStatement.getBoundSql()得到BoundSql,这个方法会完成xml中SQL语句里${}/#{}的替换。${}直接根据参数值做字符串的简单替换,#{}会被替换成占位符?,BoundSql里面就包含可以用来执行的SQL了。如下SQL示例:select * from user where id = #{id}解析成BoundSql后,其sql如下:select * from user where原创 2021-07-29 20:49:51 · 394 阅读 · 0 评论 -
ParamNameResolver源码分析
看名字就知道,ParamNameResolver是MyBatis用来解析方法参数的。我们调用Mapper接口的方法进行传参,经过ParamNameResolver解析后,xml文件里的SQL语句就可以使用这些参数了,就可以完成动态SQL和占位符的参数填充。MyBatis是如何解析参数的?如何在xml里更好的使用这些参数呢?今天我们从源码的角度来分析下。1. 源码分析ParamNameResolver类结构很简单,没有继承和实现,源码很好看懂。它的职责也非常单一:解析方法形参存放到SortedMap原创 2021-07-28 21:54:38 · 317 阅读 · 0 评论 -
MyBatis查询全流程源码分析
MyBatis作为一款优秀的持久层框架,现在已经被越来越多的公司在用了。面对这个我们每天都在使用的框架,不好好读读它的源码怎么行呢?笔者花了几天的时间阅读和调试MyBatis源码,现在把我的一些理解分享给大家,如有错误,还望指正。MyBatis源码版本:3.5.8-SNAPSHOT,源码地址:https://github.com/mybatis/mybatis-3.git1. 前言MyBatis整体框架大致如下图所示,其中每个模块都可以单拎出来写一篇文章。篇幅原因,本篇文章只会介绍【查询】的全原创 2021-07-25 14:56:25 · 518 阅读 · 1 评论