Mybatis-概览地图
2024-10-21 03:21:43
思考: “为什么在使用 Mybatis 的时候,只需定义一个接口,不用写实现类就能使用XML中或者注解上配置好的SQL语句,就能完成对数据库 CRUD 的操作呢?”
这是因为用到了接口代理类,把每一个数据库操作的DAO接口都用操作数据库的代理类实现,并注册到Spring容器让用户去使用。从代码层面来看, 主要是两个东西, 一个是mapperRegistry, 还有一个是mappedStatements.
mapperRegistry存储的是(接口全路径, MapperProxyFactory)键值对. 通过MapperProxyFactory可以创建MapperProxy.
mappedStatements存储的是(接口全路径+方法名, mappedStatement), 当sqlSession.getMapper返回的是一个MapProxy, MapProxy执行某个sql语句时, 通过MapProxy与调用的接口的名字可以组成一个key, 之后通过这个key可以到mappedStatements找到这个接口的具体实现, 即一个mappedStatement. 这也是为什么DAO接口的路径要与mapper配置文件中的nameSpace一致, 以及 DAO接口中的方法, 要与mapper配置文件中的sql片段中"id"属性内容一致. 这些都是为了后续缓存的key好匹配.
图片摘选链接:手写Mabatis
最新文章
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
- tomcat 远程调试
- windows系统和ubuntu虚拟机之间文件共享——samba
- Javascript模板引擎:Hogan
- 【原创】.NET读写Excel工具Spire.Xls使用(2)Excel文件的控制
- MVC - Action和ActionResult
- hdu 2067
- 一个Java程序员应该掌握的10项技能
- Zabbix的集中式监控
- 模块化手机project ara之我见
- test_CSDN_markdown_format
- 关于写作那些事之github告诉我构建失败,然后呢?
- 小程序开发-Now you can provide attr ";wx:key"; for a ";wx:for"; to improve performance
- sql注入总结(二)--2018自我整理
- 3.6 C++继承机制下的构造函数
- wireshark系列之wireshark过滤器
- 4.Spring中使用Log4j
- 3- 功能2:基于forms组件和ajax实现注册功能
- C语言文法阅读与理解序
- 分享 koa + mysql 的开发流程,构建 node server端,一次搭建个人博客
热门文章
- python基础-常用内置包
- Navicat Premium无法连接到oracle数据库的解决方法
- uniapp 打包app 引入高德地图
- ClickHouse数据副本引擎
- day09-功能实现08
- Kubernetes的垂直和水平扩缩容的性能评估
- 封装 avm 组件经验分享
- c#5.0(.net 4.5之后)的 Async+await+Task的异步机制的调试笔记
- [深度学习] Python人脸识别库face_recognition使用教程
- 手撕AVL树(C++)