首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MyBatis源码解读(3)——MapperMethod

在前面两篇的MyBatis源码解读中,我们一路跟踪到了MapperProxy,知道了尽管是使用了动态代理技术使得我们能直接使用接口方法。为巩固加深动态代理,我们不妨再来回忆一遍何为动态代理。...我相信在初学MyBatis的时候几乎每个人都会发出一个疑问,为什么明明是XXXDao接口,我没有用任何代码实现这个接口,但却能直接使用这个接口的方法。现在清楚了,动态代理。...回到我们的MyBatis源码,在上一节中我们知道了一个Dao接口实际上是通过MapperProxyFactory生成了一个MapperProxy代理类。...(注意:在阅读这部分源代码时,我们的主线是MyBatis是如何创建出一个代理类,以及实现其方法的,而暂时忽略其中的细节) 我们选择常见的"SELECT"sql语句来进行解读,而在"SELECT"语句中又会设计到较多的细节问题...sqlSession.selectOne(command.getName(), param); 15 } 16 break; 我们选取第7行中的executeForMany中的方法来解读试试看

552100
您找到你想要的搜索结果了吗?
是的
没有找到

源码级别解读 mybatis 插件

简介: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。...为什么要使用mybatis,相信看这篇文章的童鞋都有所了解,俺这里就多废话几句。在orm框架中,有轻量级的dbutils与mybatis,重量级的有hibernate。 为什么要选择mybatis呢?...废话不多说,我们开始缕一缕mybatis的流程 当然,最古老的方式就不去讲了(就是去调用mybatis select, selectOne这种方式),我们直接从接口的玩法中入手 这是mybatis的一张架构图...那么我们可以做一个大胆的假设,mybatis他默认打开的是DefaultSqlSession(其实在源码中是的)。...在mybatis的配置文件中加入 <!

75380

Mybatis 源码解读-设计模式总结

作者:crazyant www.crazyant.net/2022.html 虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用...等各种日志框架的适配实现; 装饰者模式,例如Cache包中的cache.decorators子包中等各个装饰者的实现; 迭代器模式,例如迭代器模式PropertyTokenizer; 接下来挨个模式进行解读...,先介绍模式自身的知识,然后解读Mybatis中怎样应用了该模式。...Mybatis提供了多种日志框架的实现,这些实现都匹配这个Log接口所定义的接口方法,最终实现了所有外部日志框架到Mybatis日志包的适配: ?...(源码篇):http://www.cnblogs.com/dongying/p/4142476.html 设计模式读书笔记—–组合模式 http://www.cnblogs.com/chenssy/p/

39441

mybatis源码解读(四)——事务的配置

上一篇博客我们介绍了mybatis中关于数据源的配置原理,本篇博客介绍mybatis的事务管理。   ...1、mybatis 支持的事务类图   mybatis 支持的所有事务的所有类都在如下包中:   下面通过类图来理解该包中所有类的关系: 2、mybatis 支持的两种事务类型管理器   通过配置文件中的...比如选择框架 Spring +mybatis,这时候没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。...再回头看看在 mybatis 的 org.apache.ibatis.transaction 包下的所有类,也就是上面的类图。...mybatis的事务首先会定义一个事务接口 Transaction, 3、初始化事务管理器   我们说事务(Transaction),一般是指要做的或所做的事情。

53230

mybatis源码解读(一)——初始化环境

本系列博客将对mybatis源码进行解读,关于mybatis的使用教程,可以查看我前面写的博客——传送门。   为了便于后面的讲解,我们这里首先构造一个统一环境。也可以参考mybatis官网。...相关配置的版本如下:   JDK:1.8   maven:3.3.9   mybatis:3.4.3 3、pom文件 1 <?...DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd...DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-...9、总结   这个demo没什么好说的,不懂的看我前面的新手使用教程即可,这是最原始的mybatis开发方式。后面会通过这个例子深入源码分析。

48020

Mybatis占位符#{}和${}的区别?源码解读(二)

本文针对笔者日常开发中对 Mybatis 占位符 #{} 和 ${} 使用时机结合源码,思考总结而来 Mybatis 版本 3.5.11 Spring boot 版本 3.0.2 mybatis-spring...启动时,mybatis-spring 解析xml文件流程图 Spring 项目启动时,mybatis-spring 自动初始化解析xml文件核心流程 图片 Mybatis 在 buildSqlSessionFactory...() 会遍历所有 mapperLocations(xml文件) 调用 xmlMapperBuilder.parse()解析,源码如下 图片 在 parse() 方法中, Mybatis 通过 configurationElement...由此我们得知 ${} 占位符拼接的字段就是我们传入的原样字段,有着 Sql 注入风险 2.2 #{} 占位符处理 #{} 占位符文本的 SqlNode 实现类为 StaticTextSqlNode,查看源码...总结 由上经过源码分析,我们知道  Mybatis  对 #{} 占位符是直接转换成问号,拼接预处理 sql。 ${} 占位符是原样拼接处理,有sql注入风险,最好避免由客户端传入此参数。

1.1K81

MyBatis 源码

一、准备工作 ---- MyBatis 工作流程:应用程序首先加载mybatis-config.xml 配置文件,并根据配置文件的内容创建 SqlSessionFactory 对象;然后,通过 SqlSessionFactory...最后通过 SqlSession 对象提交事务,关闭 SqlSession 对象,整个过程具体实现如下:就按照下面的流程进行源码分析 public void test01() throws IOException...//解析mapper 标签:很重要 mapperElement(root.evalNode("mappers")); } //列举上述 settingsElement(settings); 内部的源码...【3】解析 mapper.xml 文件,也是通过 XPathParser 类型的解析器,具体源码如下:将结果保存在 Configuration 中 /** 配置信息如下: <mappers...SqlSession 对象是 MyBatis 中最重要的一个对象,这个接口能够让你执行命令,获取映射,管理事务。

28340

Spring - FactoryBean扩展实战_MyBatis-Spring 启动过程源码解读

文章目录 Pre Pre MyBatis-Spring 组件 扩展点org.mybatis.spring.SqlSessionFactoryBean InitializingBean扩展接口 afterPropertiesSet...详解 ---- MyBatis-Spring 组件 MyBatis的启动过程包含了一系列核心对象的创建,而这个过程涉及到对配置文件的读取和处理 。...MyBatis 也专门提供了一个 MyBatis-Spring 组件来完成与 Spring 框架的集成。...对于 MyBatis-Spring 而言,它的启动过程构建在 MyBatis 的启动过程基础之上,融合了 Spring 框架的功能特性。 因此了解Spring的扩展点是非常重要的。...通过 org.mybatis.spring.SqlSessionFactoryBean,我们就可以获取 SqlSessionFactory 对象,这是 MyBatis 框架启动过程的目标生成对象 。

27020
领券