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

ibatis学习源码学习(一):类信息的缓存

 
阅读更多

Ibatis数据转化时,需要根据配置的信息(或按照约定)将查询返回的值映射到实例对象上。这时候需要用到反射机制,将对应的属性赋上对应的值。

 

Ibatis的思路是:建一个缓存(CLASS_INFO_MAP),每次反射时先再缓存里面找,如果有,则返回缓存的信息,如果没有,再利用反射机制,将反射得到的类的信息缓存起来,然后返回类的信息。因为反射本身涉及到效率问题,如果每个实例都进行反射,将大大降低框架的效率,所以采用了缓存的机制。这种思路给我们平时想通过反射设置或得到属性值的程序提供了很好的解决方案。

 

具体的实现类参考Ibatis源码里面的:com.ibatis.common.beans.ClassInfo

其中关键的方法有两个,第一个:

  /**
   * Gets an instance of ClassInfo for the specified class.
   *
   * @param clazz The class for which to lookup the method cache.
   * @return The method cache for the class
   */
  public static ClassInfo getInstance(Class clazz) {
    if (cacheEnabled) {
      synchronized (clazz) {
        ClassInfo cached = (ClassInfo) CLASS_INFO_MAP.get(clazz);
        if (cached == null) {
          cached = new ClassInfo(clazz);
          CLASS_INFO_MAP.put(clazz, cached);
        }
        return cached;
      }
    } else {
      return new ClassInfo(clazz);
    }
  }
 

第二个:

 private ClassInfo(Class clazz) {
    className = clazz.getName();
    addDefaultConstructor(clazz);
    addGetMethods(clazz);
    addSetMethods(clazz);
    addFields(clazz);
    readablePropertyNames = (String[]) getMethods.keySet().toArray(new String[getMethods.keySet().size()]);
    writeablePropertyNames = (String[]) setMethods.keySet().toArray(new String[setMethods.keySet().size()]);
  }
 
分享到:
评论

相关推荐

    ibatis源码

    描述中的"ibatis框架源码剖析书中附带的光盘,ibatis源码分析"暗示这可能是一个学习资源,用于深入理解iBATIS的工作原理,可能包括了对源码的详细解读和分析。 **iBATIS核心知识点** 1. **SQL映射**:iBATIS的核心...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...

    iBATIS框架源码剖析源码

    通过深入分析iBATIS的源码,开发者不仅可以了解其工作原理,还能学习到设计模式、数据库访问的最佳实践以及如何优雅地处理数据库操作。对于提升Java开发者的技能和理解数据库访问层的实现有极大的帮助。在实际开发中...

    ibatis-缓存使用示例

    首先,iBATIS的缓存分为两种类型:一级缓存和二级缓存。一级缓存是SqlSession级别的,它是默认开启的,每次SqlSession内的查询结果都会被存储在一级缓存中,如果同一SqlSession内再次执行相同的SQL,会直接从缓存中...

    ibatis源码+api文档+jar包

    3. 学习设计模式:Ibatis的源码中应用了许多经典的设计模式,如工厂模式、单例模式、代理模式等,这对于提升编程技能非常有帮助。 最后,API文档是开发者的重要参考材料,它详细解释了每个类、接口和方法的功能、...

    ibatis2.3源码

    通过深入研究iBATIS 2.3的源码,开发者不仅可以了解其实现细节,还可以学习到如何设计一个高效的持久层框架,提升自己的编程技巧和设计能力。同时,这也为那些希望在现有基础上定制或优化iBATIS功能的开发者提供了...

    ibatisDemo 入门源码

    《IbatisDemo入门源码详解》 IbatisDemo是一个典型的基于Ibatis框架的入门示例,它为我们展示了如何在Java项目中使用Ibatis进行数据库操作。Ibatis,一个优秀的持久层框架,它允许开发者将SQL语句直接写在配置文件...

    ibatis学习

    标题 "ibatis学习" 暗示我们即将探讨的是关于Ibatis,一个著名的Java持久层框架,它允许开发者将SQL语句直接写在配置文件中,以实现灵活的数据访问。Ibatis提供了简单易用的API,使得数据库操作与业务逻辑解耦,提高...

    传智ibatis视频源码

    Ibatis,全称为MyBatis,是一个优秀的Java...通过赖家才老师的源码学习,你可以亲手实践这些知识点,加深理解并掌握Ibatis的精髓。同时,这也将有助于你在实际项目中更高效地运用Ibatis,提升开发效率,降低维护成本。

    ibatis3源码+驱动

    《深入解析iBatis3:源码与驱动详解》 iBatis3作为一个轻量级的持久层框架,因其灵活性和高效性,在...通过对源码的深入学习,我们可以更好地利用iBatis3,提高开发效率,同时也能为解决实际问题提供强大的技术支持。

    iBatis 课件 源码 资源文件.rar

    而提供的源码资源文件,则可以帮助你更直观地了解iBatis的内部工作原理,便于学习和调试。通过阅读源码,你可以看到iBatis是如何解析XML配置,如何执行SQL,以及如何处理结果映射等细节,这对于提升自己的技术水平和...

    IBatis源码+xsd+帮助

    一、**IBatis源码分析** IBatis的源码是开源的,这对于开发者来说是一份宝贵的资源,可以让我们深入了解其工作原理和内部机制。通过阅读源码,我们可以学习到以下知识点: 1. **动态SQL**:IBatis的核心功能之一...

    iBATIS开放源代码

    7. **缓存机制**:为了提高性能,iBATIS内置了两级缓存,一级缓存在Mapper级别,二级缓存在SqlSessionFactory级别。通过缓存,可以减少不必要的数据库访问。 总的来说,iBATIS为Java开发者提供了一个轻量级的数据...

    ibatis学习和实践

    总结,Ibatis是一个强大的持久层框架,它提供灵活的SQL编写方式、动态SQL、事务管理和缓存功能,让开发者能更好地平衡SQL的灵活性和Java代码的可维护性。通过深入学习和实践Ibatis,可以提升我们的数据库操作技能,...

    ibatis学习笔记(一)

    这篇“ibatis学习笔记(一)”可能是博主对Ibatis基础概念、安装配置以及基本使用的介绍,让我们通过标签“源码”和“工具”来深入探讨Ibatis的相关知识。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架...

    iBatis实战and源代码.zip

    通过对源码的学习,我们可以了解iBatis内部的工作原理,比如它如何解析XML配置文件,如何执行SQL语句,以及如何处理结果集。这对于深入理解iBatis以及优化自己的代码非常有帮助。 总的来说,这个压缩包提供了全面的...

    ibatis-sqlMap相关参考

    8. **源码分析**:深入Ibatis源码,理解其执行流程和优化技巧。 9. **工具支持**:了解IDE中对Ibatis的支持,如插件安装和配置,以及如何利用它们提高开发效率。 通过以上知识点的学习,开发者能更好地掌握Ibatis-...

    《iBATIS in Action》源码

    8. 示例应用:书中样章PDF中的例子会在源码中得到实现,涵盖了CRUD操作、复杂查询、缓存机制、事务处理等多个方面,是学习iBATIS实战的最佳教材。 通过对这些源码的学习,开发者能够更好地掌握iBATIS的使用,提升...

    ibatis入门,Ibatis开发指南,JPetStore-5.0

    iBatis,作为一款强大的Java持久层框架,是许多开发者在进行数据访问操作时的首选。它将SQL语句与Java代码分离,提高了程序的可维护性和灵活性。本篇文章将深入探讨iBatis的核心概念、功能特性以及如何通过JPetStore...

    iBATIS-SqlMaps-中文教程

    《iBATIS-SqlMaps-中文教程》是一个深入解析iBATIS框架的资源,适合对Java Web开发感兴趣的初学者和进阶者。iBATIS是一个持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的分离,简化...

Global site tag (gtag.js) - Google Analytics