框架源码纯手写高仿MyBatisPlus框架"/>
基于框架源码纯手写高仿MyBatisPlus框架
作者:田超凡
版权所有,转载请注明原作者,仿冒侵权必究法律责任
1 MyBatisPlus简介
MyBatisPlus是一款基于MyBatis2.0封装的纯注解驱动框架,将传统MyBatis中的SQL映射文件去除,对各类持久化操作方法封装成各类注解,只需要把注解标注到对应Mapper映射器接口中的持久化方法上即可,在注解中定义SQL语句
MyBatisPlus优点:去除了xml Mapper映射文件,节省资源和硬盘占用率,SQL配置简单快捷,直接在映射器接口方法上定义即可实现绑定
MyBatisPlus缺点:可读性差,难以维护,不适用于复杂SQL和多参注入的情况,对于长SQL和参数比较多、参数类型复杂的SQL无法保证执行效率且可读性很差,因为MyBatisPlus底层是基于动态代理和反射reflect技术去解析SQL的,在解析注解值的时候会把SQL暂存到内存中,消耗内存资源。
2 MyBatisPlus源码手写实现思路
这里实现了一个简易版的MyBatisPlus,只针对DQL查询语句进行了UT,其它类型的DML操作待完善和Full Test
maven依赖配置:
pom.xml只配置ORM框架必备的Apache commons-lang、commons-collection工具包、解析XML文件的DOM4J,MySQL的JDBC驱动(注意检查Version是否和MySQL服务器版本一致,否则可能出现TraisientConnectionError等类似错误)
不要引入其他ORM框架依赖包,我们是自己手写ORM框架注解驱动版
核心思想:代理设计模式、动态代理、单例模式、工厂模式、遵循SOLID原则、反射技术
实现思路:
1 基本工作准备:
(1) 定义mybatis-config.xml核心配置文件,配置数据源和扫描的映射器接口基准目录,即MapperScannerBasePackage
(2) 定义POJO和Mapper接口
2 定义MyBatisPlus核心组件:
(1) 各类驱动注解Annotation
(2) 工具类ClassUtil解析和加载类到JVM,MyBatisDBUtil封装常见JDBC操作,StringUtil字符串工具类,XMLFileResolver XML文件解析器,基于DOM4J解析
(3) 封装模型Model:Configuration存放解析的MyBatis配置和Mapper配置(dataSource/mapperLocation/mapperRegistry)、DataSource数据源相关配置、MappedStatement扫描的SQL语句相关配置
(4) BaseBuilder和XMLConfigBuilder构造器,对解析的XML文件进行二次加工,解析配置信息并封装为Configuration
(5) Executor和SimpleExecutor封装具体的JDBC操作,Executor处理一级缓存实现逻辑,优化点:线程安全问题和内存资源占用问题,缓存命中率问题,SimpleExecutor调用MyBatisDBUtil实现具体的JDBC操作
(6) MapperProxy代理实例实现类,定义代理方法执行逻辑,MapperProxyFactory代理工厂,负责创建Mapper接口代理实例
(7) SqlSessionFactoryBuilder 解析XML配置文件,注册Mapper接口和代理实例,创建会话工厂
(8) SqlSessionFactory和DefaultSqlSessionFactory 全局唯一的单例会话工厂,关键点是安全的单例模式实现和创建会话
(9) SqlSession和DefaultSqlSession封装常见的CRUD操作,关键点是注入不同类型的Executor以实现具体的JDBC持久化方法操作策略、创建并获取Mapper接口的JDK动态代理实例
(10) MyBatisPlusTest测试类,编写UT代码进行功能测试,UT代码参照MyBatis启动代码编写
版权所有,转载请注明原作者,仿冒侵权必究法律责任
更多推荐
基于框架源码纯手写高仿MyBatisPlus框架
发布评论