Ofbiz项目学习——阶段性小结——删除数据

一、根据主键进行删除

	/**
	 * 按主键进行删除
	 * @param dctx
	 * @param context
	 * @return
	 */
	public static Map<String,Object> deleteUomByPrimaryKey(
DispatchContext dctx, Map<String,Object> context){

		//取得实体引擎实例
        GenericDelegator delegator = dctx.getDelegator();

        //TODO 在这里考虑的不是很全面, 还需要讨论一下: 1) MiscMap方式  2) delegator.makePKSingle方法
        Map<String,Object> pkFields = FastMap.newInstance();
        pkFields.put("uomId", "BaseLineProduct");    //这里删除前面创建的基线产品信息
        GenericPK primaryKey = delegator.makePK("Uom", pkFields);
        try {
        	//执行按主键删除操作
			delegator.removeByPrimaryKey(primaryKey);
		} catch (GenericEntityException e) {
			//则把错误信息以Error级别打印到日志文件中
			Debug.logError(e, module);
			//把指定的错误码对应的描述信息返回给服务调用者
			return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0002,primaryKey.toString());
		}
		//把表示成功的信息返回给服务调用者
		return ReturnMapUtil.getSuccessMap();
	}

二、根据多条件进行删除

	/**
	 * 按多条件进行删除, 并且这些条件是‘与‘ 的关系, 一般是当删除条件为非主键时使用
	 * @param dctx
	 * @param context
	 * @return
	 */
	public static Map<String,Object> deleteUomByOtherFields(DispatchContext dctx, Map<String,Object> context){

		//取得实体引擎实例
        GenericDelegator delegator = dctx.getDelegator();

        //TODO 在这里考虑的不是很全面, 还需要讨论一下:  MiscMap方式  

        //这里删除前面创建的现金管理系统信息
        Map<String,Object> deleteFields = FastMap.newInstance();
        deleteFields.put("abbreviation", "Cashm");
        deleteFields.put("description", "现金管理系统");
        try {
        	//根据设定的条件执行删除操作
			delegator.removeByAnd("Uom", deleteFields);
		} catch (GenericEntityException e) {
			//则把错误信息以Error级别打印到日志文件中
			Debug.logError(e, module);
			//把指定的错误码对应的描述信息返回给服务调用者
			return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0002,deleteFields.toString());
		}
		//把表示成功的信息返回给服务调用者
		return ReturnMapUtil.getSuccessMap();
	}

三、根据一个字段有多个值时进行删除

/**
	 * 根据一个字段的多个值,删除记录
	 * @param dctx
	 * @param context
	 * @return
	 */
	public static Map<String,Object> deleteUomByMoreValues(DispatchContext dctx, Map<String,Object> context){

		//取得实体引擎实例
        GenericDelegator delegator = dctx.getDelegator();

        //这里删除前面创建的"基线产品信息"和"现金管理系统信息"
        Map<String,Object> deleteFields = FastMap.newInstance();
        deleteFields.put("abbreviation", "BLP");
        deleteFields.put("abbreviation", "Cashm");

        //收集删除条件
        EntityCondition deleteBLPCon    = EntityCondition.makeCondition("abbreviation", EntityOperator.EQUALS, "BLP");
        EntityCondition deleteCashmCon  = EntityCondition.makeCondition("abbreviation", EntityOperator.EQUALS, "Cashm");
        EntityCondition deleteCondition = EntityCondition.makeCondition(deleteBLPCon, EntityOperator.OR, deleteCashmCon);
        try {
        	System.err.println("删除条件: " + deleteCondition.toString());
        	//根据设定的条件执行删除操作
			delegator.removeByCondition("Uom", deleteCondition);
		} catch (GenericEntityException e) {
			//则把错误信息以Error级别打印到日志文件中
			Debug.logError(e, module);
			//把指定的错误码对应的描述信息返回给服务调用者
			return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0002,deleteCondition.toString());
		}
		//把表示成功的信息返回给服务调用者
		return ReturnMapUtil.getSuccessMap();
	}

四、根据时间段进行删除

	/**
	 * 删除一个时间段内的数据
	 * @param dctx
	 * @param context
	 * @return
	 */
	public static Map<String,Object> deleteUomByDate(DispatchContext dctx, Map<String,Object> context){

		//取得实体引擎实例
        GenericDelegator delegator = dctx.getDelegator();

        //从输入参数中取出开始日期和结束日期
        String beginDateStr = (String) context.get("beginDate");
        String endDateStr   = (String) context.get("endDate");

        //设置查询条件: 记录时间 大于 beginDate ,记录时间 小于 endDate
        List<EntityCondition> conList = FastList.newInstance();

        //如果传入的开始日期不为空,则设置删除条件: 删除的记录不能早于开始日期
        if( UtilValidate.isNotEmpty(beginDateStr)){
        	try {
        		//先把开始日期的字符串转成Timestamp格式
        		Timestamp beginDate = UtilDateTime.stringToTimeStamp(beginDateStr, InnerConstant.DATE_FORMAT, TimeZone.getDefault(), Locale.CHINA);
            	//再把整个日期的时间部分设置成 00:00:00.000
            	beginDate = UtilDateTime.getDayStart(beginDate);
            	//设置查询条件: 记录时间 大于 beginDate
            	EntityCondition startDateCon = EntityCondition.makeCondition("createdStamp", EntityOperator.GREATER_THAN_EQUAL_TO, beginDate);
                conList.add(startDateCon);
			} catch (ParseException e) {
				//则把错误信息以Error级别打印到日志文件中
				Debug.logError(e, module);
				return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0003,beginDateStr,e.getMessage());
			}
        }

        //如果传入的结束日期不为空, 则设置删除条件: 删除的记录不能晚于结束日期
        if( UtilValidate.isNotEmpty(endDateStr)){
        	try {
        		//先把结束日期的字符串转成Timestamp格式
        		Timestamp endDate = UtilDateTime.stringToTimeStamp(endDateStr, InnerConstant.DATE_FORMAT, TimeZone.getDefault(), Locale.CHINA);
        		System.err.println(endDate.toString());
	        	//再把结束日期的时间部分设置成: 23:59:59.999
	        	endDate = UtilDateTime.getDayEnd(UtilDateTime.nowTimestamp());
	        	//设置查询条件: 记录时间 小于 endDate
	        	EntityCondition endTimeCon = EntityCondition.makeCondition("createdStamp", EntityOperator.LESS_THAN_EQUAL_TO, endDate);
	            conList.add(endTimeCon);
			} catch (ParseException e) {
				//则把错误信息以Error级别打印到日志文件中
				Debug.logError(e, module);
				return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0004,endDateStr,e.getMessage());
			}
        }
        EntityCondition deleteCondition = EntityCondition.makeCondition(conList, EntityOperator.AND);

        try {
        	//根据设定的条件执行删除操作
			delegator.removeByCondition("Uom", deleteCondition);
		} catch (GenericEntityException e) {
			//则把错误信息以Error级别打印到日志文件中
			Debug.logError(e, module);
			//把指定的错误码对应的描述信息返回给服务调用者
			return ReturnMapUtil.getErrorMap(DemoErrorMapping.BASE0002,deleteCondition.toString());
		}
		//把表示成功的信息返回给服务调用者
		return ReturnMapUtil.getSuccessMap();
	}

XML配置

	<service name="deleteUomByDate" engine="java"
		location="com.giantstone.bosent.demo.delegator.DelegatorDeleteDemoService" invoke="deleteUomByDate">
		<attribute name="beginDate" type="String" mode="IN" optional="true" />
		<attribute name="endDate" type="String" mode="IN" optional="true" />
		<attribute name="returnCode" type="Map" mode="OUT" optional="true" />
	</service>

  

原文地址:https://www.cnblogs.com/gzhcsu/p/11203370.html

时间: 2024-10-27 12:00:38

Ofbiz项目学习——阶段性小结——删除数据的相关文章

Ofbiz项目学习——阶段性小结——服务返回结果

一.返回成功 1.在.DispatcherReturnDemoService类中编写服务[returnSuccess],内容如下: /** * 返回成功结果 * @param dctx * @param context * @return */ public static Map<String,Object> returnSuccess( DispatchContext dctx, Map<String,Object> context ){ //填写服务执行的代码 //......

UI学习阶段性小结

#pragma mark  UI阶段性小结 //    UI(User Interface)用户界面 //    iOS App = 各种各样的UI控件 + 业务逻辑和算法 #pragma mark  一.UIView.UILabel.UIWindow #pragma mark  1.frame是一个结构体,包含2个部分的内容:origin(x和y)和Size(width和height) #pragma mark  2.bounds(边界)是view的重要属性 //    用于定义自己的边界,同

MongoDB 学习笔记之 删除数据,集合,数据库

删除数据,集合,数据库: 删除一个文档: db.media.deleteOne({"name": "Sky"}) 删除多个文档: db.media.deleteMany({"name": "Sky"}) db.media.remove({"name": "Sky"}) 删除集合: db.media.drop() 删除数据库: db.dropDatabase() 注意: 删除数据库前,一定

网上图书商城项目学习笔记-030删除二级分类

一.流程分析 二.代码 1.view层 和一相同 2.servlet层 (1)AdminCategoryServlet.java 1 /** 2 * 删除二级分类 3 * @param req 4 * @param resp 5 * @return 6 * @throws ServletException 7 * @throws IOException 8 */ 9 public String deleteChild(HttpServletRequest req, HttpServletResp

网上图书商城项目学习笔记-015删除和批量删除购物车条目

一.流程分析 二.代码 1.view层 (1)list.jsp 1 <a href="<c:url value='/CartItemServlet?method=batchDelete&cartItemIds=${item.cartItemId }'/>">删除</a> 2 3 <a href="javascript:batchDelete();">批量删除</a> 4 /* 5 * 批量删除 6

OC学习阶段性小结

/*一.1.OC是一门面向对象的语言.扩展了标准C语言的类与接口.OC能完成的操作:定义新的类.类的实例和方法.方法调用(成为发消息).属性声明(以及通过他们自动合成存取方法).静态和动态类型化.块(block)已封装的 可在任何时候执行的多段代码.基本语言的扩展,例如协议和类别. 2.面向对象编程也叫做面向接口编程,简称:OOP(Object Oriented Programming). 3.类和对象是面向对象的核心. 4.类:具有相同特征和行为的事物的抽象. 5.面向对象的三大特征:封装.继

sqlite学习笔记5:插入数据,查询数据和删除数据

曾闻:全部的编程都是已数据为中心,觉得很有道理. 所谓数据库数据库,没有数据叫什么数据库,接下来就看看怎样在表中插入数据. 一 插入数据 1 创建一张表 首先为了插入数据,须要先创建一张表: CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); 2 第一种方式:指定列 插入数据有两种主要的格式,第一种是指定列

Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracle支持的数据类型: 字符型 char 定长 最大2000个字符 char(10)----'小韩' 前四个字符放'小韩',后添加6个空格补全.(查询效率高) varchar2(20) 变长 最大4000个字符 vachar2(10)----'小韩' oracle分配四个字符,这样可以节省空间. clo

【项目积累】对JSON数据的处理

[项目简述]     接触.NET项目非常长一段时间了,前台用的都是MVC框架.不知道大家是否想过一个问题.我们是怎样将数据显示到前台的,换句话说,MVC能够识别怎么样的数据形式?答案非常easy,就是JSON数据.不太记得的,最好还是找段代码看看.我们须要将数据显示到前台.一定会返回JSON类型的数据. [博客概要] 眼下为止,JSON的应用我们都不陌生了. 但对于JSON的一些理论知识,你真正知道吗?或者说,你在项目调试的时候.以前有在前台alert过一个JSON串吗?有看过JSON串的内容