--- layout: post title: Mybatis源码分析(1) - Mybatis包目录简介 category: 技术 tags: Mybatis keywords: description: --- # Mybatis核心包 ![Map类图](//raw.githubusercontent.com/George5814/blog-pic/master/image/mybatis/mybatis-package-list.png) |包名称| 包内内容简介| |:---:|----| |annotation | 注解目录。包括所有的注解。如`@SELECT`,`@UPDATE`等 | |binding|Mapper类的实例反射生成工具目录| |builder|主要是注解,mapper和SqlSuorce的构造器及转换器| |cache|Mybatis内部缓存接口。实现了一些特定的缓存策略。`FifoCache`,`LruCache`,`BlockingCache`,`LoggingCache`等| |cursor|默认的游标处理类| |dataSource|数据源工厂类及实现。实现类包括`JndiDataSourceFactory`、`PooledDataSourceFactory`、`UnpooledDataSourceFactory`。 数据源实现类: `UnpooledDataSource`、`PooledDataSource`| |exceptions|Mybatis自定义的三个异常类。`ExceptionFactory`、`PersistenceException`、`TooManyResultsException`、`IbatisException`。都继承自`RuntimeException`| |executor|执行器相关包。包括Key生成器、加载器(包括Cglib、Javassist的代理,结果加载器)、参数处理器接口、结果处理器、结果集(resultSet)处理器、Statement处理器(实现类:`BaseStatementHandler`、`CallableStatementHandler`、`PreparedStatementHandler`、`RoutingStatementHandler`、`SimpleStatementHandler`)、执行器(`SimpleExecutor`、`ReuseExecutor`、`CachingExecutor`、`BatchExecutor`、`BaseExecutor`)| |io|主要是定义的几个VFS(`VFS`、`DefaultVFS`、`ClassLoaderWrapper`)| |javassist|javassist的字节码处理包| |jdbc|与Sql相关的操作。如Sql运行器,脚本运行器和Sql封装类等| |lang|指定是用java7还是java8的API的注解.`UsesJava7`、`UsesJava8`| |logging|各个类型的日志适配器,都实现了`Log`接口。`StdOutImpl`、`Slf4jImpl`、`NoLoggingImpl`、`Log4j2Impl`、`Log4jImpl`、`Jdk14LoggingImpl`、`BaseJdbcLogger`、`JakartaCommonsLoggingImpl`| |mapping|主要是接口参数,sql和返回结果的映射类,主要类包括:`MappedStatement`,`ParameterMap`,`ParameterMapping`,`ResultMap`,`ResultMapping`,`BoundSql`,`SqlSource`等类| |ognl|ognl包在Mybatis中的内部代码引用| |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的代码结构,了解各个组件的位置和大概的处理关系。为后续分析源码打下基础。