400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

手写Mybatis,彻底搞懂框架原理

mybatis的前身是iBatis,其源于“Internet”和“abatis”的组合,是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,它可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJO映射成数据库中的记录。
手写Mybatis,彻底搞懂框架原理

10年积累的成都网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有沾化免费网站建设让你可以放心的选择与我们合作。

Mybatis的架构设计

手写Mybatis,彻底搞懂框架原理
Mybatis的功能架构分为三层:

代码地址请查看,https://github.com/y277an/java-you-need-know。再看看正版的代码结构吧。
手写Mybatis,彻底搞懂框架原理

考虑到transaction对理解框架原理产生干扰,所以代码全部删掉

mybatis目录结构及内容
以下目录对照的是mybatis-3.5.1的源码。

  • annotations。注解目录。包括所有的注解,如@SELECT,@UPDATE等。
  • binding。Mapper类的实例反射生成工具目录。
  • builder。主要是注解,mapper和SqlSource的构造器及转换器。
  • cache。Mybatis内部缓存接口。实现了一些特定的缓存策略,FifoCache、LruCache、BlockingCache、LoggingCache等。
  • dataSource。数据源工厂类及实现。实现类包括JndiDataSourceFactory、PooledDataSourceFactory和UnpooledDataSourceFactory。数据源实现类:UnpooledDataSource和PooledDataSource。
  • exceptions。Mybatis自定义的异常类,都继承自RuntimeException。
  • executor。执行器相关包。包括Key生成器、加载器(包括Cglib、Javassist的代理,结果加载器)、参数处理器接口、结果处理器、结果集(resultSet)处理器、Statement处理器(实现类:BaseStatementHandler、CallableStatementHandler、PreparedStatementHandler、RoutingStatementHandler、SimpleStatementHandler)、执行器(SimpleExecutor、ReuseExecutor、CachingExecutor、BatchExecutor、BaseExecutor)。
  • io。主要是定义的几个VFS(VFS、DefaultVFS、ClassLoaderWrapper)。
  • jdbc。与Sql相关的操作。如Sql运行器,脚本运行器和Sql封装类等。
  • logging。各个类型的日志适配器,都实现了Log接口。StdOutImpl、Slf4jImpl、NoLoggingImpl、Log4j2Impl、Log4jImpl、Jdk14LoggingImpl、BaseJdbcLogger和JakartaCommonsLoggingImpl。
  • mapping。主要是接口参数,sql和返回结果的映射类,主要类包括:MappedStatement、ParameterMap、ParameterMapping、ResultMap、ResultMapping、BoundSql和SqlSource等类。
  • parsing。变量解析,如解析${},#{}等。
  • plugin。主要包含插件的定义接口。如Interceptor、Plugin和InterceptorChain等。
  • reflection。主要是一些反射操作的工具方法和对象工厂类,以及一些常用的包装类,如BaseWrapper、BeanWrapper、CollectionWrapper、MapWrapper和ObjectWrapper。
  • scripting。执行驱动和动态Sql解析的处理器。
  • session。主要是SqlSession和SqlSessionFactory。
  • transaction。主要是mybatis简单封装的jdbc事务操作类。
  • type。各个类型数据的处理器。用于动态的设置参数和转换数据,如IntegerTypeHandler用来处理Integer类型的值的set和get操作。除了八大基本类型,还有常用的集合及Map类型,还增加了各种时间类型的处理器。
    MyBatis的核心成员和职责
    从MyBatis代码实现的角度来看,MyBatis的核心组件如下

本文标题:手写Mybatis,彻底搞懂框架原理
网页链接:http://mbwzsj.com/article/pesdso.html

其他资讯

让你的专属顾问为你服务