`
z_xiaofei168
  • 浏览: 200625 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

B2C电子商务网站:三大框架整合开发的级联删除

    博客分类:
  • S2SH
阅读更多

B2C电子商务网站:三大框架整合开发的级联删除

       最近在做B2C电子商务网站,所以一直很忙,都没有什么时间写我的技术ITEYE博客,今天已经把进度提上去了,后台做的差不多了。今天我想给大家分享我的项目中的级联删除的操作。
       比如:对于商品表,当删除某个商品订单的时候,应该删除该订单下所有的订单详情。
       最后运行的结果是:当你点击订单的删除时,它会把所有的订单明细全部删除。这样就达到了级联删除的操作。
       以下是详细代码,大家可以参考。

 

cn.z_xiaofei168.domain包

package cn.z_xiaofei168.domain;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

public class Orders implements java.io.Serializable {

	/**
	 * @author z_xiaofei168
	 */
	private static final long serialVersionUID = 1L;
	private Integer id;
	private Payments payments;
	private Employees employees;
	private Customers customers;
	private String number;
	private Date rdate;
	private Double sum;
	private String sendmode;
	private String status;
	private Set<Orderdetails> orderdetailses = new HashSet<Orderdetails>(0);
	
	//以下省略所有的set和get方法
	
}

 

 
   Orders.hbm.xml

 

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-lazy="false"
	package="cn.z_xiaofei168.domain">
	<class name="Orders" table="orders">
		<id name="id" type="java.lang.Integer">
			<column name="id" />
			<generator class="identity" />
		</id>
		<many-to-one class="Payments" fetch="select" lazy="false"
			name="payments">
			<column name="payment_id" not-null="true" />
		</many-to-one>
		<many-to-one class="Employees" fetch="select" lazy="false"
			name="employees">
			<column name="employees_id" not-null="true" />
		</many-to-one>
		<many-to-one class="Customers" fetch="select" lazy="false"
			name="customers">
			<column name="customers_id" not-null="true" />
		</many-to-one>
		<property generated="never" lazy="false" name="number"
			type="java.lang.String">
			<column length="20" name="number" not-null="true" />
		</property>
		<property generated="never" lazy="false" name="rdate" type="date">
			<column length="19" name="rdate" not-null="true" />
		</property>
		<property generated="never" lazy="false" name="sum"
			type="java.lang.Double">
			<column name="sum" not-null="true" precision="22" scale="0" />
		</property>
		<property generated="never" lazy="false" name="sendmode"
			type="java.lang.String">
			<column length="50" name="sendmode" not-null="true" />
		</property>
		<property generated="never" lazy="false" name="status"
			type="java.lang.String">
			<column length="10" name="status" not-null="true" />
		</property>
		<set inverse="true" lazy="false" name="orderdetailses" sort="unsorted">
			<key>
				<column name="orders_id" not-null="true" />
			</key>
			<one-to-many class="Orderdetails" />
		</set>
	</class>
</hibernate-mapping>

 

  cn.z_xiaofei168.action包

 

package cn.z_xiaofei168.action;

import java.util.List;
import cn.z_xiaofei168.domain.Orders;
import cn.z_xiaofei168.service.OrdersServiceImpl;

import com.opensymphony.xwork2.ActionSupport;

public class OrdersAction extends ActionSupport {

	/**
	 * @author z_xiaofei168
	 */
	private static final long serialVersionUID = 1L;

	/** 业务层对象 */
	private OrdersServiceImpl ordersServiceImpl;
	private Orders entity;
	private List<Orders> entities;
	
	//以下省略所以的set和get方法
	
	/** 级联删除的操作 */
	public String delete() throws Exception {
		ordersServiceImpl.delete(entity.getId());
		return "delete";
	}
}
 

 

   cn.z_xiaofei168.dao包

 

package cn.z_xiaofei168.dao;

import java.util.List;
import java.util.Set;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import cn.z_xiaofei168.domain.Orderdetails;
import cn.z_xiaofei168.domain.Orders;

public class OrdersDaoImpl extends HibernateDaoSupport implements OrdersDao {

	public void delete(Orders entity) throws Exception {
		
		/** 删除订单之前,应该把订单对应的订单明细删除 */
		Set<Orderdetails> orderdetails = entity.getOrderdetailses();
		if(orderdetails.size()==0){
			System.out.println("orderdetails对象为空");
		}else{
			for(Orderdetails ord: orderdetails){
				this.getHibernateTemplate().delete(ord);
			}
		}
		this.getHibernateTemplate().delete(entity);
	}

	public void delete(Integer id) throws Exception {
		this.delete(this.findById(id));
	}
	
	public Orders findById(Integer id) throws Exception {
		return (Orders) this.getHibernateTemplate().get(Orders.class, id);
	}
}

 

  cn.z_xiaofei168.service包

 

 

package cn.z_xiaofei168.service;

import java.util.List;

import cn.z_xiaofei168.dao.OrdersDaoImpl;
import cn.z_xiaofei168.domain.Orders;

public class OrdersServiceImpl implements OrdersService {

	private OrdersDaoImpl ordersDaoImpl;

	//set方法注入
	public void setOrdersDaoImpl(OrdersDaoImpl ordersDaoImpl) {
		this.ordersDaoImpl = ordersDaoImpl;
	}
	
	public void delete(Integer id) throws Exception {
		ordersDaoImpl.delete(id);
	}
}

 

       具体的JSP页面就不在这贴了,相信大家都会,都明白。

       大家有什么可以给我留言。

 

13
13
分享到:
评论
17 楼 z_xiaofei168 2011-05-31  
risemanjavaeye 写道
z_xiaofei168 写道
risemanjavaeye 写道
我倒是对“代码都写在DAO中了”表示疑问,这样的逻辑应该放在DAO吗?不应该是在服务层吗?我不理解

业务实现不是在DAO层中吗??

在DAO层?算了,我啥也不说了

其实我想表达的意思是:业务实现是在SERVICE层的,但是真正的业务实现是在DAO层
16 楼 risemanjavaeye 2011-05-29  
z_xiaofei168 写道
risemanjavaeye 写道
我倒是对“代码都写在DAO中了”表示疑问,这样的逻辑应该放在DAO吗?不应该是在服务层吗?我不理解

业务实现不是在DAO层中吗??

在DAO层?算了,我啥也不说了
15 楼 z_xiaofei168 2011-05-27  
内联
hz020815 写道
这种方法就没必要贴出来了, 数据展示的时候都用 内联,被删除的自然就看不到 了

内联??神马?
14 楼 z_xiaofei168 2011-05-27  
risemanjavaeye 写道
我倒是对“代码都写在DAO中了”表示疑问,这样的逻辑应该放在DAO吗?不应该是在服务层吗?我不理解

业务实现不是在DAO层中吗??
13 楼 risemanjavaeye 2011-05-27  
我倒是对“代码都写在DAO中了”表示疑问,这样的逻辑应该放在DAO吗?不应该是在服务层吗?我不理解
12 楼 hz020815 2011-05-27  
这种方法就没必要贴出来了, 数据展示的时候都用 内联,被删除的自然就看不到 了
11 楼 z_xiaofei168 2011-05-27  
soliucheng 写道
就这也好意轴贴出来啊,还那么多步操作,你 象三楼那样配置一下就行了,hibernate又不傻..

你懂什么,在现实的开发中,是不用cascade="delete"的,真怀疑你是不是做开发的。
10 楼 soliucheng 2011-05-27  
就这也好意轴贴出来啊,还那么多步操作,你 象三楼那样配置一下就行了,hibernate又不傻..
9 楼 hzw2312 2011-05-27  
.out.println
z_xiaofei168 写道
hzw2312 写道
z_xiaofei168 写道
白云飞 写道
cascade="delete",看看hibernate 这个属性

我说的这个我懂,但是是真正的项目开发中是不允许用cascade="delete"这样做的。

期待解答~~~如果不用cascade那用什么属性可以达到级联的效果???

方法已经在dao中了,你可以看看哦!!

这样~~~!!
8 楼 z_xiaofei168 2011-05-27  
longxiaoyan 写道
System.out.println("orderdetails对象为空");

神马情况??
7 楼 longxiaoyan 2011-05-27  
System.out.println("orderdetails对象为空");
6 楼 z_xiaofei168 2011-05-27  
hzw2312 写道
z_xiaofei168 写道
白云飞 写道
cascade="delete",看看hibernate 这个属性

我说的这个我懂,但是是真正的项目开发中是不允许用cascade="delete"这样做的。

期待解答~~~如果不用cascade那用什么属性可以达到级联的效果???

方法已经在dao中了,你可以看看哦!!
5 楼 hzw2312 2011-05-27  
z_xiaofei168 写道
白云飞 写道
cascade="delete",看看hibernate 这个属性

我说的这个我懂,但是是真正的项目开发中是不允许用cascade="delete"这样做的。

期待解答~~~如果不用cascade那用什么属性可以达到级联的效果???
4 楼 z_xiaofei168 2011-05-27  
白云飞 写道
cascade="delete",看看hibernate 这个属性

我说的这个我懂,但是是真正的项目开发中是不允许用cascade="delete"这样做的。
3 楼 白云飞 2011-05-27  
cascade="delete",看看hibernate 这个属性
2 楼 z_xiaofei168 2011-05-27  
aa87963014 写道
。。。这个。。。还需要贴出来? 还好jsp没贴。。。

神马情况?
1 楼 aa87963014 2011-05-26  
。。。这个。。。还需要贴出来? 还好jsp没贴。。。

相关推荐

    用Struts2+Spring+Hibernate三大框架完成的级联操作

    在Java Web开发中,Struts2、Spring和Hibernate三大框架的整合使用是非常常见的技术栈,它们各自负责不同的职责,共同构建出高效、稳定的业务系统。本项目通过这三大框架实现了一个级联操作,具体涉及到了省市县以及...

    qt实现sqlite3级联删除demo

    【标题】:“qt实现sqlite3级联删除demo” 在数据库管理中,级联删除是一种常见的功能,它允许在删除一个表中的记录时,自动删除与之相关联的其他表中的记录。在Qt环境下,结合SQLite3数据库,我们可以实现这一功能...

    实现级联效果

    例如,级联删除意味着如果删除主表的一条记录,所有关联的从表记录也会被删除。这可以确保数据的一致性,但也需要谨慎处理,避免不必要的数据丢失。 3. **软件工程中的级联结构**: 在软件设计中,级联结构通常指...

    快速旋转的黑洞的霍金蒸发过程:引力子的几乎连续级联

    结果表明,快速旋转的Kerr黑洞的特征在于无因次比τgap/τ... 这种关系意味着快速旋转的黑洞产生的霍金级联具有几乎连续的特征。 我们的结果纠正了最近在文献中出现的有关霍金黑洞蒸发过程本质的一些不准确的说法。

    struts2 hibernate 框架 三级城市级联

    Struts2和Hibernate是两种非常重要的Java Web开发框架,它们分别负责表现层和持久层的管理。...通过这个三级城市级联的例子,我们可以深入学习这两个框架的结合使用,进一步提升我们的Java Web开发技能。

    opencv 资源模型包含官网模型+汽车模型

    haarcascade_eye.xml: 用于眼睛检测的级联分类器模型 haarcascade_eye_tree_eyeglasses.xml: 用于眼镜和眼睛联合检测的级联分类器模型 haarcascade_fullbody.xml: 用于全身人体检测的级联分类器模型 haarcascade_...

    mysql级联更新和级联删除

    ### MySQL级联更新与级联删除详解 在数据库设计中,外键约束是维护数据完整性和一致性的重要手段之一。MySQL的InnoDB存储引擎支持多种不同的处理外键的方式,包括级联更新(Cascade Update)和级联删除(Cascade ...

    Struts_Hibernate_Dwr框架整合省份菜单级联

    Struts、Hibernate和DWR是Java Web开发中常用的三大框架,它们各有侧重,但通过合理的整合,可以构建出高效、灵活的Web应用。本资料主要探讨的是如何将这三个框架进行集成,实现省份菜单的级联功能,即在前端选择...

    hibernate many-to-many级联保存,级联更新,级联删除

    本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...

    级联菜单 (二级级联 三级级联)

    级联菜单是一种常见的用户界面元素,它在网页设计和软件开发中被广泛使用,尤其在导航和选项选择中。级联菜单通常表现为一个主菜单项下拉显示一系列相关的子菜单,子菜单还可以继续展开显示更深层次的选项。这种设计...

    用JDBC实现数据库的级联删除与更新

    根据给定文件的信息,本文将围绕“用JDBC实现数据库的级联删除与更新”这一主题进行深入探讨,包括理解需求、设计思路、具体实现步骤以及相关代码示例。 ### 1. 需求理解 #### 1.1 业务场景 在本案例中,存在两个...

    存储过程-游标-级联删除

    在数据库管理中,级联删除是一种常见的操作,它涉及到一个表中的记录被删除时,与之关联的其他表中的记录也会自动被删除。在大型数据库系统中,这种功能通常通过外键约束来实现,但在某些情况下,如需要自定义删除...

    SQL server创建触发器实现级联删除

    #### 三、级联删除的实现方式 通常情况下,数据库管理系统支持外键约束来实现级联删除。但是,在某些场景下,可能由于历史遗留问题或者其他原因,无法直接使用外键约束。此时,可以通过创建触发器来手动实现这一...

    级联删除笔记【自用0分】

    级联删除和级联更新是数据库管理中非常重要的概念,特别是在多表关联的情况下,能够确保数据的一致性和完整性。本文将详细介绍如何在SQL Server中实现级联更新和级联删除,包括通过触发器的方式和使用外键约束的方式...

    jQuery+ajax实现三级级联

    在这个“jQuery+ajax实现三级级联”的实例中,我们主要探讨如何利用这两种技术来创建一个能够逐级联动的下拉菜单系统,这在数据筛选和表单填写中十分常见,如地区选择、部门分类等场景。 首先,jQuery是一个轻量级...

    仿人人大学高校级联选择Jquery代码

    【标题】"仿人人大学高校级联选择Jquery代码"是一个基于Jquery实现的高校级联选择功能,它旨在提供一种高效、用户友好的方式来筛选和选择大学。级联选择通常指的是在一个下拉菜单中选择一个选项后,会根据所选选项...

    MSserver自关联表的级联删除

    然而,自关联表的级联删除并不像简单的外键级联删除那样直接,因为它涉及到了递归关系。 在上述标题和描述中提到的MS Server自关联表的级联删除,主要通过触发器来实现。触发器是一种特殊的存储过程,它会在特定的...

    jQuery 城市三级级联

    在网页开发中,城市三级级联通常用于实现省市区选择功能,这种功能可以让用户逐步选择他们的省份、城市和区县,以提供精确的地理位置信息。jQuery 是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画...

    用selectOneMenu标签开发级联选择

    在Java EE web开发中,创建级联选择(也称为下拉联动)是一项常见的任务,它允许用户在两个或多个下拉菜单之间建立关联,选择一个选项会影响其他下拉菜单的选项。本篇将深入探讨如何使用`&lt;h:selectOneMenu&gt;`标签来...

Global site tag (gtag.js) - Google Analytics