JavaEE中的级联删除讲解级源码.docx
- 文档编号:3953270
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:5
- 大小:16.48KB
JavaEE中的级联删除讲解级源码.docx
《JavaEE中的级联删除讲解级源码.docx》由会员分享,可在线阅读,更多相关《JavaEE中的级联删除讲解级源码.docx(5页珍藏版)》请在冰豆网上搜索。
JavaEE中的级联删除讲解级源码
JavaEE中的级联删除讲解级源码
我们在做项目开发的时候,一定会遇到多个表之间相关联的情况,在这种情况下,我们如果想要删除其中的某个表中的数据,就要连同其他表中与之对应的数据删除。
例如:
我们设计一个客户表,一个订单表,一个订单明细表。
在每个客户表中对应多个订单表,而每个订单表对应着多个订单明细表,当我们想要删除一个客户,那么我们就得把这个客户对应的订单表以及其对应的订单明细表一同删除,那么这是我们就用到了级联删除。
我们在使用级联删除时,如果遇到多对一关系或者一对多关系时,我们应该先删除多的一方,然后在删除一的一方。
如上例,当我们删出客户时应当先删除用户对应的所有订单表,而当删除订单表时我们又得先删除与之对应的所有订单明细表。
所以我们就应该先删除订单明细表,再删除订单表最后删除客户。
但我们在使用级联删除时我们应该将这些删除操作都包含在一个事务中,如果我们在操作中有一处不成功我们就得让事务回滚。
如果全部成功我们才能提交事务,这样才能保证我们的级联删除成功,而且不会造成只删除部分数据。
下面是我们编写的级联删除的代码部分:
首先我们先封装俩个工具类这是线面几个类都得用的到达类:
数据库连接池:
packagecn.csdn.products.util;
importjava.sql.*;
publicclassJdbcUtil{
/*私有的静态的成员变量*/
privatestaticConnectionconn=null;
/*私有的构造器*/
privateJdbcUtil(){
}
/*公有静态的返回成员变量的方法*/
publicstaticConnectiongetConn(){
if(conn==null){
try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager
.getConnection("jdbc:
mysql:
//localhost:
3306/products?
user=root&password=root&useUnicode=true&characterEncoding=UTF8");
}catch(Exceptione){
e.printStackTrace();
}
}
returnconn;
}
/*公有静态的没有返回值对数据库操作的对象的关闭操作*/
publicstaticvoidrelease(ResultSetrs,PreparedStatementpstmt){
/*关闭结果集*/
if(rs!
=null){
try{
rs.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/*关闭预处理对象*/
if(pstmt!
=null){
try{
pstmt.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
publicstaticvoidmain(String[]args){
System.out.println(JdbcUtil.getConn());
}
}
Dao工具类
packagecn.csdn.products.util;
importjava.util.List;
publicinterfaceDao
booleaninsert(Tentity);
booleandelete(Tentity);
booleandeleteById(PKid);
booleanupdate(Tentity);
TfindById(PKid);
List
List
}
//删除订单明细表中的数据
//订单明细表dao层
publicinterfaceOrderDetailsDaoextendsDao
voiddeleteByOid(Integeroid);
}
publicclassOrderDetailsDaoImplimplementsOrderDetailsDao{
/*封装数据库操作的信息*/
privateConnectionconn=null;
privatePreparedStatementpstmt=null;
privateResultSetrs=null;
publicvoiddeleteByOid(Integeroid){
//第二步:
获取连接对象
conn=JdbcUtil.getConn();
try{
//关闭事务
conn.setAutoCommit(false);
//第三步:
声明sql语句oid是order(订单表中的外键)
Stringsql="deletefromorderdetailswhereoid=?
";
//第四步:
根据sql语句用conn创建预处理对象
pstmt=conn.prepareStatement(sql);
//第五步:
为占位符赋值索引从1开始
intindex=1;
pstmt.setObject(index++,oid);
//第六步:
执行更新,或查询
pstmt.executeUpdate();
//第七步:
释放资源
JdbcUtil.release(rs,pstmt);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
try{
conn.rollback();//回滚
}catch(SQLExceptione1){
e1.printStackTrace();
}
}finally{
try{
conn.setAutoCommit(true);//开启自动提交
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
}
//orderDao层(order表示订单表影射的类)
packagecn.csdn.products.dao;
importjava.util.List;
importcn.csdn.products.domain.Orders;
importcn.csdn.products.util.Dao;
publicinterfaceOrdersDaoextendsDao
//获取与客户关联的订单
List
//删除与客户关联的订单的记录
voiddeleteByCid(Integercid);
}
//orderDaoImpl层
packagecn.csdn.products.dao;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.List;
importcn.csdn.products.domain.Orders;
importcn.csdn.products.util.JdbcUtil;
publicclassOrdersDaoImplimplementsOrdersDao{
/*封装数据库操作的信息*/
privateConnectionconn=null;
privatePreparedStatementpstmt=null;
privateResultSetrs=null;
publicbooleandeleteById(Integerid){
//先删除多的哪一方
OrderDetailsDaoodd=newOrderDetailsDaoImpl();
odd.deleteByOid(id);
//第一步声明返回值变量
booleanflag=false;
//第二步:
获取连接对象
conn=JdbcUtil.getConn();
try{
//关闭事务
conn.setAutoCommit(flag);
//第三步:
声明sql语句
Stringsql="deletefromorderswhereid=?
";
//第四步:
根据sql语句用conn创建预处理对象
pstmt=conn.prepareStatement(sql);
//第五步:
为占位符赋值索引从1开始
intindex=1;
pstmt.setObject(index++,id);
//第六步:
执行更新,或查询
inti=pstmt.executeUpdate();
//第七步:
判断
if(i>0){
flag=true;
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
try{
conn.rollback();//回滚
}catch(SQLExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
}finally{
try{
conn.setAutoCommit(true);//开启自动提交
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
//第八步:
释放资源
JdbcUtil.release(rs,pstmt);
/*记得修改其返回值变量*/
returnflag;
}
}
//客户映射的类的Dao层
packagecn.csdn.products.dao;
importcn.csdn.products.domain.Customers;
importcn.csdn.products.util.Dao;
publicinterfaceCustomersDaoextendsDao
}
//客户的DaoImpl层
packagecn.csdn.products.dao;
importjava.util.List;
importcn.csdn.products.domain.Customers;
publicclassCustomersDaoImplimplementsCustomersDao{
publicbooleandelete(Customersentity){
returndeleteById(entity.getId());
}
publicbooleandeleteById(Integerid){
OrdersDaooDao=newOrdersDaoImpl();
oDao.deleteByCid(id);
returnfalse;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaEE 中的 级联 删除 讲解 源码
![提示](https://static.bdocx.com/images/bang_tan.gif)