`
ahua186186
  • 浏览: 562004 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mybatis3源码核心类1--Configuration

 
阅读更多
最近没什么事,花了一周的时间把mybatis源码看完了,现自我总结一下,尽可能的用一句话总结,方便自己理解和回顾。


出名的框架几乎都是从初始化配置文件开始的,mybatis也一样。

mybatis的配置文件是通过工具类XMLConfigBuilder,XMLMapperBuilder,XMLStatementBuilder解析后都存在Configuration中

private void parseConfiguration(XNode root) {
    try {
      propertiesElement(root.evalNode("properties")); //issue #117 read properties first
      typeAliasesElement(root.evalNode("typeAliases"));
      pluginElement(root.evalNode("plugins"));
      objectFactoryElement(root.evalNode("objectFactory"));
      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
      settingsElement(root.evalNode("settings"));
      environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631
      databaseIdProviderElement(root.evalNode("databaseIdProvider"));
      typeHandlerElement(root.evalNode("typeHandlers"));
      mapperElement(root.evalNode("mappers"));
    } catch (Exception e) {
      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
    }
  }




public class Configuration {

  protected Environment environment;

  protected boolean safeRowBoundsEnabled = false;
  protected boolean safeResultHandlerEnabled = true;
  protected boolean mapUnderscoreToCamelCase = false;
  protected boolean aggressiveLazyLoading = true;
  protected boolean multipleResultSetsEnabled = true;
  protected boolean useGeneratedKeys = false;
  protected boolean useColumnLabel = true;
  //二级缓存开关,直接决定sqlSession是否启用CachingExecutor
  protected boolean cacheEnabled = true;
  protected boolean callSettersOnNulls = false;

  protected String logPrefix;
  protected Class <? extends Log> logImpl;
  //一级缓存的默认作用域
  protected LocalCacheScope localCacheScope = LocalCacheScope.SESSION;
  protected JdbcType jdbcTypeForNull = JdbcType.OTHER;
  protected Set<String> lazyLoadTriggerMethods = new HashSet<String>(Arrays.asList(new String[] { "equals", "clone", "hashCode", "toString" }));
  protected Integer defaultStatementTimeout;
  protected Integer defaultFetchSize;
  protected ExecutorType defaultExecutorType = ExecutorType.SIMPLE;
  protected AutoMappingBehavior autoMappingBehavior = AutoMappingBehavior.PARTIAL;
  //config配置文件Properties标签的数据存储  -----全局属性配置对象
  protected Properties variables = new Properties();
  protected ReflectorFactory reflectorFactory = new DefaultReflectorFactory();
  //config配置文件objectFactory标签的数据存储
  protected ObjectFactory objectFactory = new DefaultObjectFactory();
  protected ObjectWrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory();
  //maper接口的存储容器, mybatis访问数据库的动态代理接口,MapperProxyFactory 是经典的C/S架构客户端同步访问实现
  protected MapperRegistry mapperRegistry = new MapperRegistry(this);

  protected boolean lazyLoadingEnabled = false;
  protected ProxyFactory proxyFactory = new JavassistProxyFactory(); // #224 Using internal Javassist instead of OGNL
  //数据源 id
  protected String databaseId;
  /**
   * Configuration factory class.
   * Used to create Configuration for loading deserialized unread properties.
   *
   * @see <a href='https://code.google.com/p/mybatis/issues/detail?id=300'>Issue 300</a> (google code)
   */
  protected Class<?> configurationFactory;
 //插件,可以在核心业务逻辑处理类“statementHandler”中增加sql解析,sql路由等等功能
  protected final InterceptorChain interceptorChain = new InterceptorChain();
  //config配置文件typeHandler标签的数据容器
  protected final TypeHandlerRegistry typeHandlerRegistry = new TypeHandlerRegistry();
  //config配置文件typeAlias标签的数据容器  ---别名对应容器
  protected final TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry();
  //language容器
  protected final LanguageDriverRegistry languageRegistry = new LanguageDriverRegistry();
  //mapper配置文件的数据容器
  protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection");
  //缓存容器
  protected final Map<String, Cache> caches = new StrictMap<Cache>("Caches collection");
  //resultMap容器,思考:抛弃ORM设计思想,  还可以通过JDBC的ResultSet相关方法组装成map对象返回,不需要resultSetHandler.<E>handleResultSets(statement)。
  protected final Map<String, ResultMap> resultMaps = new StrictMap<ResultMap>("Result Maps collection");
  //输入参数类型容器
  protected final Map<String, ParameterMap> parameterMaps = new StrictMap<ParameterMap>("Parameter Maps collection");
  //主键生成器容器
  protected final Map<String, KeyGenerator> keyGenerators = new StrictMap<KeyGenerator>("Key Generators collection");

  protected final Set<String> loadedResources = new HashSet<String>();
  protected final Map<String, XNode> sqlFragments = new StrictMap<XNode>("XML fragments parsed from previous mappers");
  //异常数据容器
  protected final Collection<XMLStatementBuilder> incompleteStatements = new LinkedList<XMLStatementBuilder>();
  //异常数据容器
  protected final Collection<CacheRefResolver> incompleteCacheRefs = new LinkedList<CacheRefResolver>();
  //异常数据容器
  protected final Collection<ResultMapResolver> incompleteResultMaps = new LinkedList<ResultMapResolver>();
  //异常数据容器
  protected final Collection<MethodResolver> incompleteMethods = new LinkedList<MethodResolver>();

  /*
   * A map holds cache-ref relationship. The key is the namespace that
   * references a cache bound to another namespace and the value is the
   * namespace which the actual cache is bound to.
   */
  protected final Map<String, String> cacheRefMap = new HashMap<String, String>();

分享到:
评论
1 楼 jiang2011jiang 2016-08-18  
  

相关推荐

    mybatis-generator-core-1.3.2

    1. `mybatis-generator-core-1.3.2.jar`:MBG 的核心库,包含所有实现代码生成功能的类和接口。 2. `lib` 目录:可能包含 MBG 运行时依赖的第三方库,如 JDBC 驱动等。 3. `README` 或 `doc` 文件:提供关于如何使用...

    mybatis-3-mybatis-3.5.8.zip源码

    1. **SqlSessionFactoryBuilder**: 用于构建SqlSessionFactory,它是MyBatis的核心工厂类,可以创建SqlSessionFactory实例,通常在应用程序启动时初始化。 2. **SqlSessionFactory**: 提供SqlSession的创建,...

    mybatis-3-mybatis-3.5.7.zip源码

    1. **配置文件解析**:MyBatis的核心配置文件`mybatis-config.xml`定义了数据源、事务管理器、Mappers等关键元素。通过`XMLConfigBuilder`解析这些配置,构建出`Configuration`对象,它是整个MyBatis框架的中心。 2...

    mybatis-3-mybatis-3.4.1源码

    1. **Configuration**:这是MyBatis的全局配置,包含了数据库连接信息、映射文件位置、事务管理器等。解析XML配置文件后,所有的配置信息都会被加载到这个类中。 2. **Executor**:执行器负责执行SQL,它是MyBatis...

    mybatis-3-mybatis-3.4.5 源码

    通过对MyBatis源码的学习,我们可以了解到MyBatis如何解析配置,如何构建SQL,如何处理参数和结果,以及如何利用缓存提高性能。这对于理解和优化MyBatis的应用,甚至开发自己的持久层框架都有极大的帮助。在阅读源码...

    mybatis3.x源码深度解析与最佳实践.pdf

    XMLConfigBuilder.parseConfiguration 方法是 MyBatis 中的核心方法之一,该方法负责解析 MyBatis 的配置文件,包括属性解析、加载 settings 节点、加载自定义 VFS、解析类型别名、加载插件、加载对象工厂、创建对象...

    mybatis3源码

    本篇文章将深入探讨MyBatis3的核心概念、设计模式以及关键源码。 1. **核心概念** - **SqlSession**: MyBatis的主要工作接口,用于执行SQL语句,提供增删查改等操作。 - **Mapper**: 映射器接口,定义了SQL操作的...

    mybatis-3-mybatis-3.5.8.tar.gz源码

    在深入源码之前,我们需要理解MyBatis的核心概念和组成部分: 1. **SqlSessionFactory**: 这是MyBatis的核心,用于创建SqlSession对象。SqlSessionFactory是线程安全的,可以在应用的整个生命周期内保持单例。 2. ...

    spring源码合集spring源码合集

    4. **MyBatis源码解析**:尽管"19-MyBatis源码—SQL操作执行流程源码深度剖析-徐庶"和"12-Spring之整合Mybatis底层源码解析-周瑜"主要关注MyBatis,但这两部分也是Spring生态的重要组成部分。我们将学习Spring如何与...

    我们一起读文档,学习MyBatis(一)----------- 一个简单demo的实现

    对于源码阅读,你可以深入了解MyBatis的源码,理解其内部的工作机制,比如SqlSession、Executor、ParameterHandler、ResultSetHandler等组件是如何协同工作的,这有助于提升你的Java和数据库编程技能。

    mybatis-3.3.1源码

    2. **Configuration**:这是MyBatis的核心配置类,包含了所有的配置信息,如数据源、Mappers、设置等。SqlSessionFactoryBuilder会根据传入的配置信息创建Configuration实例。 3. **SqlSessionFactory**:...

    mybatis-3.4.1源码

    3. **Configuration**: Configuration对象存储了MyBatis的所有配置,包括映射文件、参数类型处理器、插件、环境等。它是MyBatis全局配置的载体。 4. **MapperRegistry**: 该类管理所有Mapper接口和它们对应的XML...

    mybatis-3.5.0源码

    3. **配置MyBatis的配置文件**:SqlSessionFactoryBean还允许你指定MyBatis的配置文件路径,这个文件包含了MyBatis的全局配置,比如映射文件的位置、环境设置等。 4. **创建Mapper接口**:MyBatis-Spring支持使用...

    2022.9.26-mybatis-源码.rar

    《深入剖析Mybatis源码:2022.9.26更新》 在软件开发领域,Mybatis作为一款优秀的持久层框架,以其简洁、灵活的特性深受开发者喜爱。了解并掌握Mybatis的源码,不仅可以帮助我们更好地利用这个框架,还能提升我们的...

    mybatis-3-master源码注释版.zip

    通过阅读`mybatis-3-master`源码,我们可以深入了解MyBatis的内部机制,如其对AOP(面向切面编程)的运用、线程安全的设计、以及如何高效地执行SQL等。这对于我们优化自己的MyBatis应用,解决性能问题,或者进行扩展...

    阿里巴巴P7架构师纯手工打造MyBatis源码——1小时解密底层源码.txt

    本篇文章将基于阿里巴巴P7架构师纯手工打造的MyBatis源码解析资料,深入探讨MyBatis的核心原理及其内部实现机制。本文旨在帮助读者理解MyBatis的工作原理,并为日后进行更深层次的技术研究提供一定的理论基础。 ###...

    SpringBoot+Mybatis整合完整源码

    - **创建 Mybatis 配置类**:如果使用 Spring Boot 的自动配置,通常无需额外配置 Mybatis,但如果需要自定义配置,可以创建一个配置类,并使用 `@Configuration` 和 `@MapperScan` 注解。 - **Mapper 接口与 XML ...

    mybatis-3-master.zip

    1. **SqlSessionFactoryBuilder**: 这是构建 SqlSessionFactory 的工厂类,SqlSessionFactory 是 MyBatis 的核心对象,负责创建 SqlSession,进而执行 SQL 语句。 2. **Configuration**: 配置类,存储了 MyBatis 的...

    Mybatis源码(4)-拦截器.pdf

    在Configuration类中,我们可以看到拦截器如何被应用到这些关键组件上: - `newParameterHandler()`、`newResultSetHandler()`和`newStatementHandler()`这三个方法分别用于创建新的ParameterHandler、...

    Mybatis源码分析-上课笔记1

    在分析MyBatis源码时,可以采用宏观和微观两种视角。宏观上理解整个框架的架构和流程,微观上深入到具体的类和方法,通过阅读和调试代码来理解其实现细节。同时,绘制流程图或UML图能帮助更好地梳理组件间的交互。 ...

Global site tag (gtag.js) - Google Analytics