`
lovevirus
  • 浏览: 20055 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Identity Map

阅读更多

 

概念<o:p></o:p>

通过在map中保存所有的加载对象,确保对象只加载一次,每次查找对象都先去map中查找是否有这个对象,如果有就返回,没有才去加载<o:p></o:p>

场景<o:p></o:p>

1、管理从数据库加载的对象,使之持久对象在内存中始终唯一<o:p></o:p>

2、作为从数据库加载对象的缓存器,可以避免每次读数据时候都要从数据库加载<o:p></o:p>

应用<o:p></o:p>

单数据库简单用法:对每个表都有一个对应的map,当需要从数据库中加载一个对象的时候,你首先核实一下map,如果map中存在一个和你所需要加载的对象相等的一个对象,直接返回这个对象,如果没有,查找数据库,并且把加载出来的对象放到map中。<o:p></o:p>

注意点<o:p></o:p>

1、关键字的选择:以表名作为map的关键字,以主键作为map中各个对象的关键字<o:p></o:p>

2Explicit or GenericGeneric是对每类对象都采用一个方法,比如find("Person", 1),其中一个输入参数制定是什么类型的对象,好处在新增加一个map不需要重新些一个方法。Explicit是对每类对象分别采用不同的方法,比如:findPerson(1),好处比较直观,如果通过泛型来做的,也可以做到新增一个map不用重新一个方法。<o:p></o:p>

3map的数量:每类对象对应一个map,如果不同类的每个对象都有一种标识能区别的,可以用次方法,有利于管理map,而且增加一类对象的时候也不需要在家map;整个session对应一个map,比较符合数据库的设计,每个map用表名作为key,比较清晰,但是比较难处理的是继承树的处理。<o:p></o:p>

4、存放位置:如果存放在processContext,必须关注的是必须确保不同session只能得到他自己的对象。还有就是对map要进行事务性的保护,其中涉及到两个问题,第一个就是尽管你是用关系型数据库来保存数据,但是你必须把加载的数据作为对象放在事务性缓存中,第二个是那些只读对象,因为不需要进行修改,所以可以在整个processContext中都可以使用,有种方法是只读对象的map放在processContext中,可修改对象的map放在session中。
分享到:
评论

相关推荐

    castor-1.0-xml.jar

    org.castor.util.IdentityMap org.castor.util.IdentitySet org.exolab.javasource.JEnum org.exolab.javasource.JType org.exolab.castor.util.List org.exolab.javasource.Header org.exolab.javasource.JClass ...

    mikro-orm:基于Data Mapper,工作单元和Identity Map模式的Node.js的TypeScript ORM。 支持MongoDB,MySQL,MariaDB,PostgreSQL和SQLite数据库

    基于Data Mapper,和模式的Node.js的TypeScript ORM。 支持MongoDB,MySQL,MariaDB,PostgreSQL和SQLite数据库。 受和启发。 :thinking_face: 什么单位? 您可能会问:工作单元到底是什么,为什么我要关心它?...

    HATCHER代数拓扑习题解答

    我们证明了G : A × I → A是一个Homotopy between the identity map 1A and the constant map A → {a0}。 本资源摘要信息涵盖了代数拓扑中的多个重要概念,包括Homotopy inverse、Deformation Retraction、...

    SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0-cp39-cp39-win_amd64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-py3-none-any.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp311-cp311-musllinux_1_1_aarch64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp311-cp311-macosx_10_9_x86_64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp310-cp310-macosx_11_0_arm64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp38-cp38-win_amd64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0-cp39-cp39-win32.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp311-cp311-win_amd64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp38-cp38-musllinux_1_1_x86_64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp38-cp38-win32.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0-cp38-cp38-musllinux_1_1_aarch64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp311-cp311-musllinux_1_1_x86_64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0-cp39-cp39-musllinux_1_1_aarch64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

    SQLAlchemy-2.0.0rc3-cp39-cp39-macosx_10_9_x86_64.whl

    会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...

Global site tag (gtag.js) - Google Analytics