`
gzspark
  • 浏览: 109664 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

OFBiz实体引擎开发烹调书 (三)

阅读更多
* 如何为SELECT SUM(QUANTITY - CANCEL_QUANTITY) AS QUANTITY之类的语句设置别名

  <alias entity-alias="OI" name="quantity" function="sum">
      <complex-alias operator="-">
          <complex-alias-field entity-alias="OI" field="quantity" default-value="0"/>
          <complex-alias-field entity-alias="OI" field="cancelQuantity" default-value="0"/>
      </complex-alias>
  </alias> 
 


  SELECT SUM(COALESCE(OI.QUANTITY,'0') - COALESCE(0I.CANCEL_QUANTITY)) AS QUANTITY在结果集包含默认值是一个好的习惯,否则如果有一项为null,那么最终相减的结果就也为null了.
  操作符可以为任何你当前使用数据库所支持的SQL操作符,比如算术运算符+, -, * 和/ 或者字符串连接符 ||.

  你可以增加function=""标签来完成在complex-alias-field中的min, max, sum, avg, count, count-distinct, upper 及lower集合运算.  示例, 以上的定义可以用另一种方法表示为:

  <alias entity-alias="OI" name="quantity">
      <complex-alias operator="-">
          <complex-alias-field entity-alias="OI" field="quantity" default-value="0" function="sum"/>
          <complex-alias-field entity-alias="OI" field="cancelQuantity" default-value="0" function="sum"/>
      </complex-alias>
  </alias>



  即为SELECT (SUM(COALESCE(OI.QUANTITY,'0')) - SUM(COALESCE(OI.CANCEL_QUANTITY,'0'))) AS QUANTITY查询结果集

* 我讨厌OFBiz的实体引擎,我要自己的JDBC连接!
  好的,以下是你获得JDBC连接的方法:

import org.ofbiz.entity.jdbc.ConnectionFactory;

String helperName = delegator.getGroupHelperName("org.ofbiz");    // gets the helper (localderby, localmysql, localpostgres, etc.) for your entity group org.ofbiz
Connection conn = ConnectionFactory.getConnection(helperName); 
Statement statement = conn.createStatement();
statement.execute("SELECT * FROM PARTY");
ResultSet results = statement.getResultSet();

//  通过普通JDBC 的结果集来操作

//Alternatively, you can use the SQLProcessor like this:

SQLProcessor sqlproc = new SQLProcessor(helperName);
sqlproc.prepareStatement("SELECT * FROM PARTY");
ResultSet rs1 = sqlproc.executeQuery();

ResultSet rs2 = sqlproc.executeQuery("SELECT * FROM PRODUCT");



你可以查看framework/webtools/webapp/webtools/WEB-INF/actions/entity/EntitySQLProcessor.bsh了解它的使用

在以下网址你可以获得相关JavaDoc的内容:
http://www.opentaps.org/javadocs/version-1.0/framework/api/org/ofbiz/entity/jdbc/SQLProcessor.html
http://www.opentaps.org/javadocs/version-1.0/framework/api/org/ofbiz/entity/jdbc/ConnectionFactory.html

  *** 请先考虑以下内容: 你放弃数据库的无关性意味着你在某些方法将无法与框架或共它程序相共通.你确定你要这么做吗?

获得更好的做法,请访问 http://www.opentaps.org/docs/index.php/Using_the_Query_Tool

* 关于时间比较方法的一些警告

在你用 GREATER_THAN比较一个 Timestamp类型数据时, 你有可能获得相同的时间数据:

delegator.findByAnd("XXX", UtilMisc.toList(new EntityExpr("fromDate", EntityOperator.GREATER_THAN, "2007-12-31 23:59:59.998")));


有可能包含fromDate=2007-12-31 23:59:59.998的数据.  (此种情况发生于PostgreSQL 8.1并且GenericDAO 类生成的SQL代码是'FROM_DATE > ' so 所以我也不明白发生这个问题的原因.) 所以确保安全的方法是, 增加1秒到需要比较的时间中然后使用 GREATER_THAN_EQUAL_TO方法

delegator.findByAnd("XXX", UtilMisc.toList(new EntityExpr("fromDate", EntityOperator.GREATER_THAN_EQUAL_TO, "2008-01-01 00:00:00.998")));



* 警告: 在空集合中使用EntityOperator.IN

请小心如果使用EntityOperator.IN去判断一个非空集合在一个空集合中的包含项,你有可能获得一个语法错误: 在Derby或者其它一些不为人知的数据库中可能会出错.
所以建议你能在使用EntityOperator.IN之间,通常执行UtilValidate.isNotEmpty方法来判断一下结果集是否为空

* 警告: delegator.getNextSubSeqId 不能确保唯一性

很多实体有很多合成的主键.示例OrderItem's 主键是orderId + orderItemSeqId.  InventoryItemDetail's 主键是inventoryItemId +inventoryItemSeqId.  通常, delegator.getNextSubSeqId 通常是获得一个序列值,但是在多线程的访问下有可能无法确保生成的值的唯一性.  此段内容在
http://issues.apache.org/jira/browse/OFBIZ-1636 中有相关文档记录.

当前, 如果有可能多个线程尝试同时写入实体组合键时,可以使用delegator.getNextSeqId来替代getNextSubSeqId.  (此问题不会发生于OrderItem, 因为它只使用单线程写入, 但有可能发生于 InventoryItemDetail, 它使用多线程来创建库存记录项.)


完>>

本文档译自ofbiz 4.0 cookbooks,本人翻译,欢迎转载,请注明出处.
2
0
分享到:
评论

相关推荐

    ofbiz实体引擎

    Ofbiz实体引擎是Ofbiz框架的重要组成部分,它简化了数据库操作,提高了开发效率。通过对实体定义的理解和熟练运用实体引擎的API,开发者能够更专注于业务逻辑,而不是底层数据存储。无论是在小型项目还是大型企业级...

    OFbiz实体引擎指南

    OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨...包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

    OFBIZ开发指南 英文2

    此外,书中可能还会介绍OFBIZ的Web界面开发,包括使用Freemarker模板语言创建动态页面,以及如何使用AJAX技术增强用户体验。对于扩展OFBIZ,你将学习到如何创建新的模块,编写定制的服务,以及如何部署和调试你的...

    Ofbiz快速开发入门详解

    在《Ofbiz开发快速入门》中,你将了解到Ofbiz的核心概念,如实体模型(Entity)、服务(Service)和组件(Component)。实体模型是Ofbiz的基础,它定义了业务数据结构;服务则负责处理业务逻辑,是Ofbiz实现功能的...

    OFBIZ10.04组件开发入门.doc

    **OFBIZ 10.04 组件开发入门** OFBIZ,全称为Open For Business Project,是一个基于Java的企业级应用框架,主要用于构建电子商务、供应链管理、CRM等复杂业务系统。本文档主要针对OFBIZ 10.04版本,通过讲解Region...

    ofbiz开发手册

    OFBiz 开发手册 OFBiz 是一个基于 Java 的开源电商平台,旨在提供一个灵活、可扩展、可配置的电商解决方案。本文档将作为一个 OFBiz 的入门教材,主要介绍 OFBiz 的环境搭建、安装以及用一个简单的应用作为例子介绍...

    Ofbiz16.11.05运行及开发环境搭建等

    - **Ofbiz实体引擎(九) 多租户**:实体引擎支持多租户架构,允许在一个OFBiz实例上管理多个独立的业务环境,每个环境有自己的数据和配置。 - **Ofbiz权限判断语法**和**权限设计详解**:OFBiz具有精细的权限管理...

    ofbiz开发文档

    2. **实体引擎**:用于管理数据库中的对象,提供了一种声明式的方式来定义实体和它们之间的关系,类似于ORM(对象关系映射)。 3. **工作流引擎**:处理业务流程的自动化,如审批流程、订单处理等,支持自定义工作...

    ofbiz api开发文档

    《OFBiz API 开发文档详解》 在信息技术领域,OFBiz(Open For Business Project)是一个开源的企业级应用框架,主要用于构建复杂的电子商务系统。OFBiz 提供了一整套全面的业务组件,涵盖了从供应链管理到客户关系...

    Apache+OFBiz+开发初学者指南

    4. **工作流(Workflows)**:OFBiz的工作流引擎提供了自动化业务流程的能力。它允许开发者定义和管理业务流程,如审批流程、订单处理等。 5. **UI(User Interface)**:OFBiz提供了丰富的Web应用程序界面,包括...

    ofbiz devolopment tutorial 开发指南

    在《OFBiz开发教程》中,我们将深入探讨如何使用OFBiz框架进行开发。OFBiz(Open For Business Project)是一个开源的企业级应用框架,用于构建和管理电子商务、供应链、CRM等业务系统。本教程旨在引导初学者逐步...

    Ofbiz开发规范.docx

    《Ofbiz开发规范》是针对Ofbiz框架的开发人员制定的一套编码和设计准则,旨在提升软件质量和团队协作效率。规范主要包括代码风格、代码长度、行宽、对齐、注释等多个方面。 1. **代码风格规范**: - **缩进**:...

    ofbiz开发入门之CmsBackEnd实现的CRUD

    总结一下,OFBiz的CmsBackEnd CRUD实现涉及到与OFBiz核心组件的交互,尤其是实体引擎。开发者需要了解并熟练运用服务定义、实体操作以及查询语言,才能高效地完成内容管理任务。通过博客文章和提供的截图,学习者...

    ofbiz开发入门总结

    《Ofbiz开发入门总结》 Ofbiz,全称Open For Business Project,是一个开源的企业级应用框架,主要用于构建复杂的电子商务和企业管理系统。它基于Java技术,提供了丰富的组件模型和灵活的业务流程,使得开发者能够...

    ofbiz资料大全

    里面是下载地址,如果逆向开发ofbiz,只要下载它就绝对没错了 Apache+OFBiz+开发初学者指南.rar OFBiz开发快速入门.rar OFBiz-技术文档.rar OFBiz API中文版.rar Apache OFBiz Cookbook Sep 2010.rar Opentaps ...

    ofbiz开发初学者指南

    ofbiz开发初学者指南

Global site tag (gtag.js) - Google Analytics