我们的生产厂家、购销合同、货物(购销合同下的)、附件(货物下的)这四大块的关系我们来回顾一下:
<!-- 级联删除 --> <delete id="deleteByContractProductById" parameterType="string"> delete from ext_cproduct_c where contract_product_id in <foreach collection="array" item="id" open="(" close=")" separator=","> #{id} </foreach> </delete>
<pre name="code" class="html"><!-- 级联删除 删除合同时同时删除合同下的货物--> <delete id="deleteByContractById" parameterType="string"> delete from contract_product_c where contract_id in <foreach collection="array" item="id" open="(" close=")" separator=","> #{id} </foreach> </delete> <!-- 级联删除 删除合同时删除合同货物下的所有附件--> <delete id="deleteExtByContractById" parameterType="string"> delete from ext_cproduct_c where contract_product_id in( select contract_product_id from contract_product_c where contract_id in <foreach collection="array" item="id" open="(" close=")" separator=","> #{id} </foreach> ) </delete>先来给ContractProduct来加新的级联删除的逻辑:首先是Dao层ContractProductDao.java:
package cn.hpu.jk.dao; import java.io.Serializable; import cn.hpu.jk.domain.ContractProduct; public interface ContractProductDao extends BaseDao<ContractProduct>{ //我们这里可以直接使用继承的BaseDao的增删改查方法 //创建一系列其它Dao的原因是因为其它Dao有可能需要拓展 //拓展的级联删除方法 public void deleteByContractProductById(Serializable[] ids) throws Exception; }
package cn.hpu.jk.dao.impl; import java.io.Serializable; import org.springframework.stereotype.Repository; import cn.hpu.jk.dao.ContractProductDao; import cn.hpu.jk.domain.ContractProduct; @Repository //为了包扫描的时候这个Dao被扫描到 public class ContractProductDaoImpl extends BaseDaoImpl<ContractProduct> implements ContractProductDao{ public ContractProductDaoImpl(){ //设置命名空间 super.setNs("cn.hpu.jk.mapper.ContractProductMapper"); } @Override public void deleteByContractProductById(Serializable[] ids) throws Exception { super.getSqlSession().delete(super.getNs()+".deleteByContractProductById", ids); } }
//删除多个 @Override public void delete(Serializable[] ids) { try { //先删除所有货物下的附件 contractProductDao.deleteByContractProductById(ids); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } contractProductDao.delete(ids); } //删除一个 @Override public void deleteById(Serializable id) { Serializable[] ids={id}; try { //先删除所有货物下的附件 contractProductDao.deleteByContractProductById(ids); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } contractProductDao.deleteById(id); }
package cn.hpu.jk.dao; import java.io.Serializable; import java.util.Map; import cn.hpu.jk.domain.Contract; public interface ContractDao extends BaseDao<Contract>{ //我们这里可以直接使用继承的BaseDao的增删改查方法 //创建一系列其它Dao的原因是因为其它Dao有可能需要拓展 public void updateState(Map map);//修改状态 //拓展的级联删除方法 public void deleteByContractById(Serializable[] ids) throws Exception; public void deleteExtByContractById(Serializable[] ids) throws Exception; }
package cn.hpu.jk.dao.impl; import java.io.Serializable; import java.util.Map; import org.springframework.stereotype.Repository; import cn.hpu.jk.dao.ContractDao; import cn.hpu.jk.domain.Contract; @Repository //为了包扫描的时候这个Dao被扫描到 public class ContractDaoImpl extends BaseDaoImpl<Contract> implements ContractDao{ public ContractDaoImpl(){ //设置命名空间 super.setNs("cn.hpu.jk.mapper.ContractMapper"); } @Override public void updateState(Map map) { super.getSqlSession().update(super.getNs()+".updateState", map); } @Override public void deleteByContractById(Serializable[] ids) throws Exception { super.getSqlSession().update(super.getNs()+".deleteByContractById", ids); } @Override public void deleteExtByContractById(Serializable[] ids) throws Exception { super.getSqlSession().update(super.getNs()+".deleteExtByContractById", ids); } }
@Override public void delete(Serializable[] ids) { try { //删除合同时删除合同货物下的所有附件 contractDao.deleteExtByContractById(ids); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { //删除合同时同时删除合同下的货物 contractDao.deleteByContractById(ids); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } contractDao.delete(ids); } @Override public void deleteById(Serializable id) { Serializable[] ids={id}; try { //删除合同时删除合同货物下的所有附件 contractDao.deleteExtByContractById(ids); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { //删除合同时同时删除合同下的货物 contractDao.deleteByContractById(ids); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } contractDao.deleteById(id); }
思考:我们每次删除完都要去下一级或者数据库看看我们删除了没有,可不可以直接在合同列表中显示每个合同下的货物有多少件?可不可以在货物列表下显示每个货物下有多少个附件?答案当然是可以,我们下一篇总结再详谈。
转载请注明出处:http://blog.csdn.net/acmman/article/details/48595867