Apache OFBiz 学习笔记 之 实体引擎

本文深入解析EntityEngine框架,介绍其独特之处、数据建模方法及实体类型的定义方式,并演示如何使用GenericValue对象进行数据库操作。
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 迭代器
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值