Ofbiz架构讲解与讨论http://wenku.baidu.com/view/b631f311f18583d049645903
1. 创建记录
Map planetValues = UtilMisc.toMap("planetId", "JUPITER", " planetName", "Jupiter");
GenericValue planetGV = delegator.makeValue("Planet", planetValues); planetGV.create();
UtilMisc是集合类操作的工具类,ofbiz优化了map,list,set。 GenericValue 对象是对应数据库中一条记录。
以上代码等价于
INSERT INTO Planet (planetId, planetName) VALUES ("JUPITER", "Jupiter").
2. 更新记录
Map planetValues = UtilMisc.toMap("planetId", "JUPITER");
GenericValue planetGV = delegator.findByPrimaryKey("Planet",planetValues); planetGV.put("planetName", "Joopiter"); planetGV.store();
以上代码等价于
UPDATE Planet SET planetName = "Joopiter" WHERE planetId = "JUPITER"
3. 删除记录
Map planetValues = UtilMisc.toMap("planetId", "JUPITER");
GenericValue planetGV = delegator.findByPrimaryKey("Planet", planetValues); planetGV.remove();
以上代码等价于
DELETE FROM Planet WHERE planetId = "JUPITER"
4. 查询记录
condition = new EntityExpr("planetId", EntityOperator.EQUALS, "EARTH"); data = delegator.findByCondition("Planet", condition, null, null);
以上代码等价于
SELECT * FROM Planet WHERE planetId = "EARTH" 其中
EntityOperator 为ofbiz逻辑操作符号类。
EQUALS NOT_EQUAL LESS_THAN GREATER_THAN
LESS_THAN_EQUAL_TO (less than or equal to) GREATER_THAN_EQUAL_TO IN NOT_IN BETWEEN LIKE NOT_LIKE NOT
findByCondition(entityName,condition,filedList,orderList)方法的四个参数。
entityName:查询的实体名
condition :查询条件
filedList :实体属性列表
orderList : 属性排序列表
fields = UtilMisc.toList("planetId", "planetName");
data = delegator.findByCondition("Planet", condition, fields, null);
以上代码等价于
SELECT plantetId,name FROM Planet
fields = UtilMisc.toList("planetId DESC"); //fields = UtilMisc.toList("-planetId ");
以上代码等价于
SELECT * FROM Planet ORDER BY planetId DESC
模糊查询
condition = new EntityExpr("planetName", EntityOperator.LIKE, "%AR%"); data = delegator.findByCondition("Planet", condition, null, null);
以上代码等价于
SELECT * FROM Planet WHERE planetName LIKE "%ar%"
复合条件查询
conditionList = UtilMisc.toList
(new EntityExpr("planetName", EntityOperator.LIKE, "%ar%"), new EntityExpr("planetName", EntityOperator.LIKE, "%m%")); condition1 = new EntityConditionList(conditionList,
EntityOperator.OR); condition2 = new EntityConditionList
(UtilMisc.toList(new EntityExpr("planetName", EntityOperator.LIKE, "%s%"), new EntityExpr("planetName", EntityOperator.LIKE, "%P%")), EntityOperator.OR);
combined = new EntityConditionList(UtilMisc.toList(condition1, condition2), EntityOperator.AND); data = delegator.findByCondition("Planet", combined, null, null);
以上代码等价于 SELECT * FROM
Planet
WHERE
(planetName LIKE "%ar%" OR planetName LIKE "%t%") AND
(planetName LIKE "%s%" OR planetName LIKE "%P%")
Accessing the Entities and View Entitieshttp://blog.csdn.net/ztk3939339/article/details/8781483
无条件遍历
使用如下代码即可:
findList(EntityName, null, null, null, null,false);
条件遍历
需要先了解如下概念:
条件的表达
EntityWhereString - SQL语句描述,OFBiz的开发者强烈不建议使用这个,因为破坏了OFBiz的封装性
EntityExpr - 使用OFBiz封装好的操作符来描述一个条件,推荐使用,简单易懂。EntityExpr = 左值 + operator + 右值。我们使用EntityCondition.makeCondition()来生成EntityExpr
EntityOperator - 定义了条件中的操作符
EQUALS,NOT_EQUAL,LESS_THAN,GREATER_THAN,LESS_THAN_EQUAL_TO (less than or equal to),GREATER_THAN_EQUAL_TO - 用于数值的比较
condition = EntityCondition.makeCondition("planetId", EntityOperator.NOT_EQUAL,"EARTH");
IN,NOT_IN - 规定遍历的结果的某个属性值需要在/不在某个集合中
condition = EntityCondition.makeCondition("planetId", EntityOperator.IN, UtilMisc.toList("EARTH", "PLUTO"));
LIKE,NOT_LIKE - 用于字符串匹配
condition = new EntityExpr("planetName", EntityOperator.LIKE, "%AR%");
这里的意思是找出名字里面还有AR的所有planet
% - any number of characters
_ - any one character
EntityConditionList - 由多个EntityExpr连接来。 EntityConditionList = list_of(condition1,condition2,...) + EntityJoinOperator
conditionList = UtilMisc.toList(EntityCondition.makeCondition("planetName", EntityOperator.LIKE, "%ar%"),
EntityCondition.makeCondition("planetName", EntityOperator.LIKE, "%t%"));
conditions = EntityCondition.makeCondition(conditionList, EntityOperator.AND);
EntityJoinOperator - 两个值AND和OR。其实它是继承EntityOperator得来的,所以使用EntityOperator.AND和EntityOperator.OR也行
public List<GenericValue> findList(String entityName, EntityCondition entityCondition, Set<String> fieldsToSelect, List<String> orderBy, EntityFindOptions findOptions, boolean useCache) - 返回查找的列表
entityName
entityCondition - 查找的条件,可以为EntityExpr,也可以为EntityConditionList,因为他们都是继承于EntityCondition的
fieldsToSelect - 结果中需要显示field,即选择要显示的列
orderBy - 结果的排序,排序的规则是:orders the retrieved records by those fields. If there is more than one field in the list, ordering is performed by the first field, then the second, and so on。默认是升序排列。如果要降序排列,可以这样:
order = UtilMisc.toList("planetId DESC");
注意:此处planetId和DESC之间的空格有且只能有一个,多了少了都会出错,其他地方有多少个空格都无所谓
或者
order = UtilMisc.toList("-planetId");
注意:-和planetId之间不能有空格,否则出错,其他地方空格随意
findOptions - 不常用,设为null
useCache - 不常用,设为false
单一条件查找
import org.ofbiz.base.util.*;
import org.ofbiz.entity.*;
import org.ofbiz.entity.condition.*;
condition = EntityCondition.makeCondition("planetId", EntityOperator.IN,UtilMisc.toList("EARTH", "PLUTO"));
data = delegator.findList("Planet", condition, null, null, null,false);
多条件查找
import org.ofbiz.base.util.*;
import org.ofbiz.entity.*;
import org.ofbiz.entity.condition.*;
conditionList = UtilMisc.toList(EntityCondition.makeCondition("planetName", EntityOperator.LIKE, "%ar%"),
EntityCondition.makeCondition("planetName", EntityOperator.LIKE, "%t%"));
conditions = EntityCondition.makeCondition(conditionList, EntityOperator.AND);
data = delegator.findList("Planet", conditions, null, null, null,false);
查找结果排序
import org.ofbiz.base.util.*;
order = UtilMisc.toList("planetId DESC");
data = delegator.findList("Planet", null, null, order, null, false);
选择要结果中Field
import org.ofbiz.base.util.*;
fields = UtilMisc.toSet("planetId", "planetName");
data = delegator.findList("Planet", null, fields, null, null, false);
分页
int listSize = 0;
int lowIndex = 0;
int highIndex = 0;
int viewSize = 10;
lowIndex = (Integer.parseInt(pagenumber) - 1) * viewSize + 1;
highIndex = Integer.parseInt(pagenumber) * viewSize;
List<GenericValue> list = null;
String entityName = "SandbagUserTotalScoreProgramView";
TransactionUtil.begin();
EntityListIterator pli = null;
Set<String> fieldToSet = FastSet.newInstance();
List<String> orderBy = FastList.newInstance();
orderBy.add("-score");
EntityFindOptions findOpts = new EntityFindOptions();
findOpts.setResultSetType(EntityFindOptions.TYPE_SCROLL_INSENSITIVE);
findOpts.setMaxRows(15);
List<EntityCondition> mainCondList = FastList.newInstance();
if (UtilValidate.isNotEmpty(traineeId)) {
mainCondList.add(EntityCondition.makeCondition("traineeId", EntityOperator.EQUALS, traineeId));
}
mainCondList.add(EntityCondition.makeCondition("fromType", EntityOperator.EQUALS, "program"));
EntityCondition mainCond = EntityCondition.makeCondition(mainCondList, EntityOperator.AND);
pli = delegator.find(entityName, mainCond, null, fieldToSet, orderBy, findOpts);
if (lowIndex > 0 && viewSize > 0) {
list = pli.getPartialList(lowIndex, viewSize);
} else {
list = pli.getCompleteList();
}
listSize = pli.getResultsSizeAfterPartialList();
if (highIndex > listSize) {
highIndex = listSize;
}
TransactionUtil.commit();
success = "1";
resultObj.put("rows", viewSize);
resultObj.put("total", listSize);
resultObj.put("pagecount", listSize % viewSize > 0 ? listSize / viewSize + 1 : listSize / viewSize);
resultObj.put("data", parseViewDatList(list));
resultObj.put("success", success);
分享到:
相关推荐
dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom元素查询 示例代码JavaScript dom操作 dom...
在提供的示例中,主要展示了如何使用LINQ查询SQL数据库,通过LINQ to SQL进行数据操作。 首先,我们来看第一个示例,这是查询顾客的公司名和地址信息。在这里,`from c in ctx.Customers`表示从名为`ctx`的数据上...
我们将说明可能遇到的一些常见查询类型,以便您了解查询系统的工作方式。示例集中的每个时间序列仅存储单个数据点,并且UID已被截断为单个字节以使其更易于阅读。示例查询是来自HTTP API的所有Metric查询,仅显示m=...
access 联合查询 示例 将两个以上数据表中的相关数据通过联合查询筛选出来,显示在一个查询数据表中。
### MySQL查询示例详解 #### 一、MySQL与SQL简介 在进行具体示例之前,我们先简单介绍一下MySQL和SQL的基础知识。MySQL是一种关系型数据库管理系统(RDBMS),广泛应用于Web应用开发等领域。SQL(Structured Query ...
【标题】"jsp/servlet分页带查询示例"是一个典型的Web开发教程,它涵盖了如何在Java Web应用程序中实现分页查询的功能。这个示例包括了必要的组件和步骤,帮助开发者理解如何在JSP(JavaServer Pages)和Servlet中...
VBA模糊查询示例(使用单元格区域数据).xls
sql入门及进阶查询示例,包含常用sql查询语句示例,带有注解,可以改后缀或,用txt打开
mysql多表查询示例,假设我们有以下三个表: Employee(员工表) emp_id: 员工ID emp_name: 员工姓名 dept_id: 部门ID Department(部门表) dept_id: 部门ID dept_name: 部门名称 Salary(薪资表) emp_id: 员工...
1_连接查询与子查询示例.sql
关于博文mysql查询示例的数据库表。如果需要可以下载。
利用google map 进行地址的查询,是入门的示例性代码。
QTreeView和QStandardItem使用示例,并可以模糊查询
基于Swift实现的PM2.5查询示例【Swift】 一个基于Swift实现的PM2.5查询示例。基于CocoaPods构建。克隆后切换到Swift-PM25目录下,使用pod install安装依赖库。然后启动PM25.xcworkspace 适用人群:学习不同技术...
本软件“C语言函数功能示例查询软件”就是针对C语言中的函数提供的一款实用工具,旨在帮助开发者快速查找并理解函数的使用方法。 该软件包含了C语言标准库中众多函数的详细信息,包括函数名、参数列表、返回值、...
5. **数据操作**:如何创建、更新、读取和删除Google服务中的数据,例如搜索查询、地图标记、邮件发送等。 6. **最佳实践**:示例可能还包含了使用Google API的最佳实践,如性能优化、并发请求处理等。 7. **示例...
jsp 操作 MySQL 实现查询、插入、删除功能示例 jsp 操作 MySQL 实现查询、插入、删除功能示例是指使用 Java 服务器页面(jsp)来操作 MySQL 数据库,以实现查询、插入、删除等基本数据库操作的示例。 jsp 操作 ...
2. **SQL语言**:你可以通过查询这些示例数据库学习SQL语言的基本语法,如SELECT语句用于查询数据,INSERT语句用于插入数据,UPDATE语句用于更新数据,DELETE语句用于删除数据。此外,还涉及到更复杂的SQL操作,如...
SQL SERVER 2000不支持TRANSFORM...PIVOT语句,所以在MDB中的交叉查询语句拷到ADP中是无法运行的,在SQL SERVER的联机帮助中有如何设计交叉报表的示例,但它生成的列标题是固定的。 <P><P>本示例演示了如何生成动态列...
axure学习教程及一些示例axure学习教程及一些示例