• Apache OFBiz 学习笔记 之 实体引擎


    1、概述
        entity engine和常见的ORM有一点很大的不同,他的mapping object只有一个 GenericEntity,称它的entity engine 为adaptive object model更为合适一些,是一种比较灵活,代码量非常少的独特的持久化方案。使用entity engine做的项目和其他的ORM相比有一个很明显的特征:非常少的对象
     
        基于Entity Engine 对数据库进行建模完全屏蔽了各种数据库的差别,可以支持从MySql到Oracle几乎所有的关系数据库
     
        Entity Engine提供了简单有效的数据建模方式,通过简单的XML文件来描述实体,不需要写任何代码就能实现实体的创建,存储,删除,查找,排序,再也不需要写任何代码就能实现实体的创建,存储,删除,查找,排序,再也不需要编写和维护数据持久化的代码,通过JDBC支持任意种类的数据库
     
     
    1.1 实体引擎的概念
     
        DataSource:数据源,在一个数据库实体中可以有多个数据库schema,不同的schema覆盖各自的实体。数据源定义和配置在entityengine.xml中
     
        Entity Delegators:实体代理,使用实体代理来访问数据库
    例:framework/entity/config/entityengine.xml
     
      <delegator name="default-no-eca" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" entity-eca-enabled="false" distributed-cache-clear-enabled="false">
            <group-map group-name="org.ofbiz" datasource-name="localderby"/>
            <group-map group-name="org.ofbiz.olap" datasource-name="localderbyolap"/>
            <group-map group-name="org.ofbiz.tenant" datasource-name="localderbytenant"/>
        </delegator>
        Entity Group:就是在组名下的一组实体,组名用来指示实体代理类确定这些实体使用哪个数据源
     
    实体定义
    例:applications/product/entitydef/entitymodel.xml
        <entity entity-name="ProdCatalog"
                package-name="org.ofbiz.product.catalog"
                title="Catalog Entity" default-resource-name="ProductEntityLabels">
          <field name="prodCatalogId" type="id-ne"></field>
          <field name="catalogName" type="name"></field>
          <field name="useQuickAdd" type="indicator"></field>
          <field name="styleSheet" type="url"></field>
          <field name="headerLogo" type="url"></field>
          <field name="contentPathPrefix" type="long-varchar"></field>
          <field name="templatePathPrefix" type="long-varchar"></field>
          <field name="viewAllowPermReqd" type="indicator"></field>
          <field name="purchaseAllowPermReqd" type="indicator"></field>
          <prim-key field="prodCatalogId"/>
        </entity>
     
    1.2实体类型
     
        entity:标准实体,是MVC架构中的模型(MODEL)的基本单元;简单的说,就是一个数据库表。
     
        view-entity:视图,通常是成员实体通过一系列关系连接起来的集合
     
        extend-view:扩展实体,实体能够通过<extend-entity>元素来扩展
     
    2.1标准实体(entity)
        属性:
        entity-name: 实体名
        table-name:表名
        package-name:包名
        default-resource-name:缺省资源文件名
        dependent-on:指定父级实体和依赖的实体,仅用来指定层次化实体结构
        sequence-bank-size:序列号步长
        enable-lock:是否在这个实体上使用优化锁
        子元素:
        description:说明
        field:字段
        prim-key:主键
        relation:关系
        copyright:版权
        index:索引
    例:framework/security/entitydef/entitymodel.xml    
    <entity entity-name="UserLogin"
                package-name="org.ofbiz.security.login"
                title="User Login Entity">
          <field name="userLoginId" type="id-vlong-ne"></field>
          <field name="currentPassword" type="short-varchar"></field>
          <field name="passwordHint" type="description"></field>
          <field name="isSystem" type="indicator"></field>
          <field name="enabled" type="indicator"></field>
          <field name="hasLoggedOut" type="indicator"></field>
          <field name="requirePasswordChange" type="indicator"></field>
          <field name="lastCurrencyUom" type="id"></field>
          <field name="lastLocale" type="very-short"></field>
          <field name="lastTimeZone" type="id-long"></field>
          <field name="disabledDateTime" type="date-time"></field>
          <field name="successiveFailedLogins" type="numeric"></field>
          <field name="externalAuthId" type="id-vlong-ne">
              <description>For use with external authentication; the userLdapDn should be replaced with this</description>
          </field>
          <field name="userLdapDn" type="id-vlong-ne">
              <description>The user's LDAP Distinguished Name - used for LDAP authentication</description>
          </field>
          <prim-key field="userLoginId"/>
     
        </entity>
    2.2视图(view-entity)
        属性:
        entity-name:实体名
        package-name:包名
        dependent-on:依赖关系
        default-resource-name:缺省资源名
        never-cache:从不缓存
        auto-clear-cache:自动清除缓存
        title:标题
        copyright:版权
        author:作者
        version:版本
        子元素:
        description:说明
        member-entity:成员实体
        alias-all:所有别名
        alias:别名
        view-link:试图连接
        relation:关系
    例:applications/party/entitydef/entitymodel.xml
        <view-entity entity-name="PartyAndUserLogin"
                package-name="org.ofbiz.party.party"
                title="Party and Contact Mech View Entity">
          <member-entity entity-alias="PTY" entity-name="Party"/>
          <member-entity entity-alias="ULN" entity-name="UserLogin"/>
          <alias entity-alias="PTY" name="partyId"/>
          <alias entity-alias="PTY" name="partyTypeId"/>
          <alias entity-alias="ULN" name="userLoginId"/>
          <alias entity-alias="ULN" name="currentPassword"/>
          <alias entity-alias="ULN" name="passwordHint"/>
          <alias entity-alias="ULN" name="enabled"/>
          <alias entity-alias="ULN" name="disabledDateTime"/>
          <alias entity-alias="ULN" name="successiveFailedLogins"/>
          <view-link entity-alias="PTY" rel-entity-alias="ULN">
            <key-map field-name="partyId"/>
          </view-link>
          <relation type="one-nofk" rel-entity-name="Party">
            <key-map field-name="partyId"/>
          </relation>
          <relation type="one-nofk" rel-entity-name="UserLogin">
            <key-map field-name="userLoginId"/>
          </relation>
        </view-entity>
    2.3扩展试图(extend-entity)
        属性:
        entiy-name:实体名
        子元素
        field:字段
        relation:关系
        index:索引
    例:applications/party/entitydef/entitymodel.xml
        <extend-entity entity-name="UserLogin">
            <field name="partyId" type="id"></field>
            <relation type="one" fk-name="USER_PARTY" rel-entity-name="Party">
                <key-map field-name="partyId"/>
            </relation>
            <relation type="one-nofk" rel-entity-name="Person">
                <key-map field-name="partyId"/>
            </relation>
            <relation type="one-nofk" rel-entity-name="PartyGroup">
                <key-map field-name="partyId"/>
            </relation>
        </extend-entity>
    3、GenericValue对象
        一个GenericValue对象就是数据库实体的一条记录
    4、创建、更新、删除、数据库记录
    4、1创建实体
    1、获取GenericValue实体对象
    OFBiz中提供了多种获取实体对象的方式,推荐使用下面的方式
    GenericValue tempValue = delegator.makeValue("EntityName");
     
     
    4、2更新实体
     
    4、3删除实体
     
     
    5、几种取数据库记录
    5.1几个常用的查询方法
    通过主键查询:public GenericValue findByPrimaryKey(String entityName,Map<String ,? extends Object> fields)
    指定字段(and组合)查询:public List<GenericValue> findByAnd(String entityName,Map<String,? extends Object> fields)
    条件查询:public List<GenericValue> findList(String entityName,EntityCondition entityCondition,Set<String> fieldsToSelect,List<String> orderBy,EntityFindOptions findOptions,boolean useCache)
    查询列表:public List<GenericValue> findList(String entityName,EntityCondition entityCondition,Set<String> fieldsToSelect,List<String> orderBy,EntityFindOptions findOptions,boolean useCache)
    参数说明:
    String entityName:要查询及记录的实体
    EntityCondition entityCondition :限制获取的条件
    Set fieldsToSelect :返回记录获取的字段,null为全部
    List orderBy :排序字段,null为排序
    EntityFindOptions findOptions 查找选项
    boolean useCache 是否使用缓存
     
    6、动态视图实体
    DynamicViewEntity 动态视图
        
    EntityCondition条件
    EntityFunction 函数
    EntityOperator 操作
    EntityFindOptions 查询选项
    EntityListIterator 迭代器
  • 相关阅读:
    201671010116. 2016-2017-10《Java程序设计》第10周学习总结
    201671010116. 2016-2017-8《Java程序设计》第9周学习总结
    201671010116. 2016-2017-8《Java程序设计》第8周学习总结
    Java学习计划
    201671010114 2016-2017-2 《Java程序设计》学习总结
    2016-2017-2 《Java程序设计》第十六周学习总结
    201671010114 2016-2017-2 《Java程序设计》第十五周学习总结
    201671010114 2016-2017-2 《Java程序设计》第十四周学习总结
    201671010114 2016-2017-2 《Java程序设计》第十三周学习总结
    201671010114 2016-2017-2 《Java程序设计》第十二周学习总结
  • 原文地址:https://www.cnblogs.com/ofbiz/p/3161254.html
Copyright © 2020-2023  润新知