概念<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>
2、Explicit or Generic:Generic是对每类对象都采用一个方法,比如find("Person", 1),其中一个输入参数制定是什么类型的对象,好处在新增加一个map不需要重新些一个方法。Explicit是对每类对象分别采用不同的方法,比如:findPerson(1),好处比较直观,如果通过泛型来做的,也可以做到新增一个map不用重新一个方法。<o:p></o:p>
3、map的数量:每类对象对应一个map,如果不同类的每个对象都有一种标识能区别的,可以用次方法,有利于管理map,而且增加一类对象的时候也不需要在家map;整个session对应一个map,比较符合数据库的设计,每个map用表名作为key,比较清晰,但是比较难处理的是继承树的处理。<o:p></o:p>
4、存放位置:如果存放在processContext,必须关注的是必须确保不同session只能得到他自己的对象。还有就是对map要进行事务性的保护,其中涉及到两个问题,第一个就是尽管你是用关系型数据库来保存数据,但是你必须把加载的数据作为对象放在事务性缓存中,第二个是那些只读对象,因为不需要进行修改,所以可以在整个processContext中都可以使用,有种方法是只读对象的map放在processContext中,可修改对象的map放在session中。
分享到:
相关推荐
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 ...
基于Data Mapper,和模式的Node.js的TypeScript ORM。 支持MongoDB,MySQL,MariaDB,PostgreSQL和SQLite数据库。 受和启发。 :thinking_face: 什么单位? 您可能会问:工作单元到底是什么,为什么我要关心它?...
DataMapper是一款基于IdentityMap模式的出色ORM。DataMapper的使用方式类似于与 Ruby on Rails 捆绑在一起的流行ORM ActiveRecord ,但有一些非常重要的区别。引用 DM wiki 的话“数据库中的一行应该等于一个对象...
我们证明了G : A × I → A是一个Homotopy between the identity map 1A and the constant map A → {a0}。 本资源摘要信息涵盖了代数拓扑中的多个重要概念,包括Homotopy inverse、Deformation Retraction、...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...
会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子...