文章插图
Mybatis发展到现在,各位条友都非常熟悉了,对Mybatis的使用越发的顺手,今天本文介绍Mybatis的核心原理--动态代理,并且梳理出Mybatis源码的入口点 。
背景介绍
文章插图
Mybatis是一款优秀的ORM持久层框架,也就是把数据库字段映射为对象的属性;Mybatis将JDBC进行封装,对其中的驱动,连接,资源解析等操作集中处理,简化早期JDBC的繁琐开发,让我们在开发的过程中只专注于SQL语言的编写,SQL的性能优化 。
Mybatis之前的故事在ORM映射框架没有出现之前,都是基于JDBC来对业务数据进行常见的操作,SQL逻辑也经常嵌套在代码,极大的耦合性等
使用JDBC进行数据库操作最常见的步骤如下,一起来回顾一下 。
JDBC操作数据库:
- 导入JDBC驱动包
- 通过DriverManager注册驱动
- 创建连接
- 创建Statement
- CRUD操作
- 操作结果集
- 关闭操作
- 引入JDBC驱动包,
- 引入Mybatis包
- CRUD操作 。
- 在JDBC的前三个操作中,主要是做驱动加载和数据库的连接等工作;在Mybatis中统一使用配置文件进行处理 。
- 使用JDBC需要创建Statement,这个步骤涉及参数的填充绑定;在Mybatis中仅仅使用@Param或者是其他方式进行绑定,并没有直接通过sql字符串进行操作 。
- 使用JDBC,需要在结果集自己去控制结果游标,结果集转换等工作;在Mybatis中按照指定的返回实体类返回结果 。
- 使用JDBC操作完成后,需要统一关闭系统资源;Mybatis并不需要 。
Mybatis架构设计
文章插图
一、配置类/配置文件
通过分析可得,Mybatis省略了JDBC的驱动连接等操作,那么将这些模板化的东西配置化统一管理处理 。所以首先需要一个配置文件,需要连接地址、连接驱动等信息通过配置文件记录处理
二、Mapper仓库&Mapper注册中心
Sql的操作单元,作为一个Mapper接口保存,这些mapper接口需要统一注册管理、解析、使用等 。
三、执行器
Mapper得到数据后,需要一个负责解析、检查、执行的部件
四、StementHandler
拿到真正可执行的SQL后,需要和数据库操作的功能 。所以需要StementHandler,StementHandler主要的作用是执行器怎么去执行,底层依赖的Stement怎么和数据库交互等作用
五、结果集Handler
执行完SQL后,按照接口返回值适配,映射解析返回等功能
六、字段处理器
在StementHandler和结果集Handler中间有一个字段映射处理器 。主要作用是字段的映射关系的建立 。
七、Spring整合适配
优秀的框架对spring的支持也需要自己的一个适配
八、拦截器
为了让框架更有可扩展性,在如上的步骤之间都可执行拦截器供用户自己扩展适配·
Mybatis核心--JDK动态代理分析Mybatis的架构,发现其中最主要的是Mapper,Mapper是这个框架的纽带,一个Mapper接口怎么实现参数和sql绑定,怎么拿到关联的sql进行操作,怎么将结果集安装我们的要求返回 。
接下来就来揭开这个谜底---JDK动态代理 。
文章插图
JDK动态代理是什么? 简单的一句话,就是:运行时创建一个实现了一组给定接口的新类 。我们以Mybatis解析Mapper来举例子 。
1.首先:假设我有一个Mapper接口
文章插图
SysUserMapper是一个接口,是不能直接实例化的;Java基础扎实的伙伴都知道,接口是不能被实例化的
- 一文带你看完小红书情侣拍照108式 为什么美图比手机拍照好
- 一文读懂电子学生证的核心技术有哪些
- 一文带你详细了解毛利和净利的区别 毛利与净利的区别
- 一文读懂注册公司需要什么材料 注册公司需要什么材料?
- 一文解答关于手机屏幕亮度的疑问 手机屏幕亮度忽明忽暗怎么回事
- 一文了解联想笔记本恢复出厂设置的方法 联想笔记本咋样恢复出厂设置
- 一文弄懂什么是频谱 频谱是什么东西
- 一文看懂五服 五服是什么意思
- 长时间喝咖啡,身体会产生哪些变化_有好有坏,一文讲清楚
- 一文了解小米11需要贴什么膜 小米11曲面屏贴什么膜比较好