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 迭代器

Apache OFBiz 学习笔记 之 实体引擎的更多相关文章

  1. Apache OFBiz 学习笔记 之 服务引擎 二

    加载服务定义文件   ofbiz-component.xml:所有的服务定义文件在每个组件的ofbi-component.xml文件中   加载服务定义 例:framework/common/ofbi ...

  2. Apache OFBiz 学习笔记 之 服务引擎 一

    概述     服务定义为一段独立的逻辑顺序,当多个服务组合一起时可完成不同类型的业务需求     服务有很多类型,WorkFlow.Rules.Java.SOAP.BeanShell等.java类型的 ...

  3. Apache Flink学习笔记

    Apache Flink学习笔记 简介 大数据的计算引擎分为4代 第一代:Hadoop承载的MapReduce.它将计算分为两个阶段,分别为Map和Reduce.对于上层应用来说,就要想办法去拆分算法 ...

  4. Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用

    Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...

  5. Apache Lucene学习笔记

    Hadoop概述 Apache lucene: 全球第一个开源的全文检索引擎工具包 完整的查询引擎和搜索引擎 部分文本分析引擎 开发人员在此基础建立完整的全文检索引擎 以下为转载:http://www ...

  6. ofbiz学习笔记01--多表关联查询

    不管做什么项目,肯定会用到多表关联查询数据,从网络查询得知ofbiz有三种多表关联查询方法 实现一:Screem.xml 中的 section 里,加 <action>, 加 get-re ...

  7. Apache Hadoop学习笔记一

    官网:http://hadoop.apache.org/ 1 什么是Hadoop? Apache™Hadoop®项目开发了用于可靠,可扩展的分布式计算的开源软件. Apache Hadoop软件库是一 ...

  8. Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理

    原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...

  9. MongoDB学习笔记~MongoDB实体中的值对象

    回到目录 注意,这里说的值对象是指在MongoDB实体类中的,并不是DDD中的值对象,不过,两者也是联系,就是它是对类的补充,自己本身没有存在的价值,而在值对象中,也是不需要有主键Id的,这与DDD也 ...

随机推荐

  1. MySQL 创建数据库并且指定编码

    GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; UTF8: CREATE DATABASE ` ...

  2. SaaS系列介绍之十五: SaaS知识重用

    1 建立并积累自己的开发体系 遵行业界的规定又有自己的特色是我们所追求的目标.成功的软件公司都有丰富而可复用的代码组件,几行代码在单个系统里可能无足轻重,但一旦可在大量的系统中可重复使用那就是价值不菲 ...

  3. 去掉eclipse的xml和js验证

    一.XML Properties > Validation you have two options: 1- Configure Workspace Settings (disable the ...

  4. 【转】Windows Server 2008修改远程桌面连接数

    按照下面的设置是成功了的,我设置的连接数是5个. http://jingyan.baidu.com/article/154b463150d1b128ca8f4194.html

  5. iOS开发--浅谈CocoaAsyncSocket编程

    Socket就是一种特殊的文件.它是一个连接了两个用户的文件,任何一个用户向Socket里写数据,另一个用户都能看得到,不管这两个用户分布在世界上相距多么遥远的角落,感觉就像坐在一起传纸条一样. 这么 ...

  6. Intellij idea使用postgresql 反向生成实例, 'Basic' attribute type should not be 'Object'

    mapped type不能Object? 本人使用 intellij idea 15 , postgresql 9.4,在开发java ee . 在用 Hibernate时, 需要用数据库表反向生成实 ...

  7. jps

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...

  8. Support Library官方教程(1)概述

    Support Library The Android Support Library package is a set of code libraries that provide backward ...

  9. MTK6577+Android4.04编译

    MTK6577+Android4.04编译 编译命令 ./mk new 出错信息如下: **********checkingEnv************ Your building environm ...

  10. CRC校验码

    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码.对于一个给定的(N,K)码,可以证明存在一个最高次幂为R的多项式G(x)(R ...