【springmvc+mybatis项目实战】杰信商贸-17.货物修改+删除

来源:互联网 发布:天猫和淘宝关系 编辑:程序博客网 时间:2024/04/30 00:09
重点知识回顾
a)主从结构:
1)它和主表在mapper有什么不同
按对象来映射(hibernate)
按普通字段来映射(mybatis)

b)前台页面的结构

货物的外键:合同,通过get的方式在url后面加参数(主从)
货物的外键:生产厂家,通过下拉列表的方式(只需要一个id时)
对象方式获得外键:一般是需要多个字段

c)权限管理:细粒度的权限
日常权限系统:角色、用户、权限,它实现主菜单、左侧菜单、URL、按钮
细粒度权限系统:包含上面的所有内容,还要包括数据权限(对数据进行过滤,按人,按部门),分管领导-跨部门,跨人员权限。(单独创建一个维护表)


我们接下来的任务:对货物信息进行修改和删除
先来写修改,我们的Mapper层已经配置好SQL语句了:
[html] view plaincopy
  1. <update id="update" parameterType="cn.hpu.jk.domain.ContractProduct">  
  2.     update contract_product_c  
  3.     <set>  
  4.         CONTRACT_ID=#{contractId},  
  5.     FACTORY_ID=#{factoryId},  
  6.     <if test="factoryName != null">FACTORY_NAME=#{factoryName},</if>  
  7.     <if test="productNo != null">PRODUCT_NO=#{productNo},</if>  
  8.     <if test="productImage != null">PRODUCT_IMAGE=#{productImage},</if>  
  9.     <if test="productDesc != null">PRODUCT_DESC=#{productDesc},</if>  
  10.     <if test="cnumber != null">CNUMBER=#{cnumber},</if>  
  11.     <if test="outNumber != null">OUT_NUMBER=#{outNumber},</if>  
  12.     <if test="loadingRate != null">LOADING_RATE=#{loadingRate},</if>  
  13.     <if test="boxNum != null">BOX_NUM=#{boxNum},</if>  
  14.     <if test="packingUnit != null">PACKING_UNIT=#{packingUnit},</if>  
  15.     <if test="price != null">PRICE=#{price},</if>  
  16.     <if test="amount != null">AMOUNT=#{amount},</if>  
  17.     <if test="finished != null">FINISHED=#{finished},</if>  
  18.     <if test="exts != null">EXTS=#{exts},</if>  
  19.     <if test="orderNo != null">ORDER_NO=#{orderNo},</if>  
  20.     </set>  
  21.     where contract_product_id=#{id}  
  22. </update>  

由于我们继承了BaseDao以及BaseImpl,所以我们拥有以下方法:
[java] view plaincopy
  1. public void update(T entity) {  
  2.     this.getSqlSession().update(ns + ".update", entity);  
  3. }  
所以我们的Dao层不再添加代码

同理,我们的Service层在之前已经写好了update的方法:
[java] view plaincopy
  1. @Override  
  2. public void update(ContractProduct contractProduct) {  
  3.       
  4.     contractProductDao.update(contractProduct);  
  5. }  
所以我们的Dao层不再添加代码

下面我们来编写Controller层的方法:
[java] view plaincopy
  1. //转向修改页面  
  2. @RequestMapping("/cargo/contractproduct/toupdate.action")  
  3. public String toupdate(String id,Model model){  
  4.     ContractProduct obj=contractProductService.get(id);  
  5.     model.addAttribute("obj", obj);  
  6.       
  7.     //准备生产厂家的下拉列表  
  8.     List<Factory> factoryList=factoryService.getFactoryList();  
  9.     model.addAttribute("factoryList",factoryList);  
  10.       
  11.     return "/cargo/contract/jContractProductUpdate.jsp";//货物的修改页面  
  12. }  
  13.   
  14.   
  15. //修改  
  16. @RequestMapping("/cargo/contractproduct/update.action")  
  17. public String toupdate(ContractProduct contractProduct,Model model){  
  18.     contractProductService.update(contractProduct);  
  19.       
  20.     model.addAttribute("contractId", contractProduct.getContractId());  
  21.       
  22.     return "redirect:/cargo/contractproduct/tocreate.action";  
  23. }  

接下来使我们的货物修改的jsp页面:
[html] view plaincopy
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ include file="../../base.jsp"%>  
  3. <%@ include file="../../baselist.jsp"%>  
  4. <html xmlns="http://www.w3.org/1999/xhtml">  
  5. <head>  
  6.     <title>添加货物信息</title>  
  7.     <script type="text/javascript">  
  8.         //设置冗余的生产厂家名称  
  9.         function setFactoryName(val){  
  10.             var ele=document.getElementById("factoryName");  
  11.             ele.value=val;  
  12.         }  
  13.     </script>  
  14. </head>  
  15. <body>  
  16. <form method="post">  
  17. <div id="menubar">  
  18. <div id="middleMenubar">  
  19. <div id="innerMenubar">  
  20.     <div id="navMenubar">  
  21. <ul>  
  22. <li id="save"><a href="#" onclick="formSubmit('update.action','_self');">确定</a></li>  
  23. <li id="back"><a href="${ctx}/cargo/contract/list.action">返回</a></li>  
  24. </ul>  
  25.     </div>  
  26. </div>  
  27. </div>  
  28. </div>  
  29.        
  30. <div class="textbox" id="centerTextbox">  
  31.       
  32.     <div class="textbox-header">  
  33.     <div class="textbox-inner-header">  
  34.     <div class="textbox-title">  
  35.         修改货物信息  
  36.     </div>   
  37.     </div>  
  38.     </div>  
  39. <div>  
  40.    
  41.     <div>  
  42.         <table class="commonTable" cellspacing="1">  
  43.             <input type="hidden" name="id" value="${obj.id}"/>  
  44.             <input type="hidden" name="contractId" value="${obj.contractId}"/>  
  45.                 <tr>  
  46.                     <td class="columnTitle_mustbe">厂家名称:</td>  
  47.                     <td class="tableContent">  
  48.                     <select name="factoryId" onchange="setFactoryName(this.options[this.selectedIndex].text);">  
  49.                         <option value="">--请选择--</option>  
  50.                         <c:forEach items="${factoryList}" var="f">  
  51.                         <option value="${f.id}" <c:if test="${obj.factoryId==f.id}">selected</c:if>>${f.factoryName }</option>  
  52.                         </c:forEach>  
  53.                         <input type="hidden" id="factoryName" name="factoryName" value="${obj.factoryName}"/>  
  54.                     </select>  
  55.                     </td>  
  56.                     <td class="columnTitle_mustbe">货号:</td>  
  57.                     <td class="tableContent"><input type="text" name="productNo" value="${obj.productNo}"/></td>  
  58.                 </tr>  
  59.                   
  60.                 <tr>  
  61.                     <td class="columnTitle_mustbe">货物照片:</td>  
  62.                     <td class="tableContent"><input type="text" name="productImage" value="${obj.productImage}"/></td>  
  63.                       
  64.                 </tr>  
  65.                   
  66.                 <tr>  
  67.                     <td class="columnTitle_mustbe">数量</td>  
  68.                     <td class="tableContent"><input type="text" name="cnumber" value="${obj.cnumber}"/></td>  
  69.                     <td class="columnTitle_mustbe">装率:</td>  
  70.                     <td class="tableContent"><input type="text" name="loadingRate" value="${obj.loadingRate}"/></td>  
  71.                 </tr>  
  72.                   
  73.                  <tr>  
  74.                     <td class="columnTitle_mustbe">箱数:</td>  
  75.                     <td class="tableContent"><input type="text" name="boxNum" value="${obj.boxNum}"/></td>  
  76.                     <td class="columnTitle_mustbe">单价:</td>  
  77.                     <td class="tableContent"><input type="text" name="price" value="${obj.price}"/></td>  
  78.                 </tr>  
  79.                   
  80.                  <tr>  
  81.                     <td class="columnTitle_mustbe">包装单位:</td>  
  82.                     <td class="tableContent"><input type="text" name="packingUnit" value="${obj.packingUnit}"/></td>  
  83.                     <td class="columnTitle_mustbe">排序号:</td>  
  84.                     <td class="tableContent"><input type="text" name="orderNo" value="${obj.orderNo}"/></td>  
  85.                 </tr>  
  86.                   
  87.                 <tr>  
  88.                     <td class="columnTitle_mustbe">货物描述:</td>  
  89.                     <td class="tableContent"><textarea  name="productDesc" style="height:200px;width: 400px">  
  90.                     ${obj.productDesc}</textarea></td>  
  91.                 </tr>  
  92.             </table>  
  93.     </div>  
  94. </div>  
  95.    
  96. </form>  
  97. </body>  
  98. </html>  

之后我们还要添加修改的入口,我们就在货物的列表中新增一个“操作”列,在其中放置“修改”以及“删除”操作的链接:
如图


代码:
[html] view plaincopy
  1. <table id="ec_table" class="tableRegion" width="98%" >  
  2.     <thead>  
  3.     <tr>  
  4.         <td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>  
  5.         <td class="tableHeader">序号</td>  
  6.         <td class="tableHeader">厂家名称</td>  
  7.         <td class="tableHeader">货号</td>  
  8.         <td class="tableHeader">数量</td>  
  9.         <td class="tableHeader">包装单位</td>  
  10.         <td class="tableHeader">装率</td>  
  11.         <td class="tableHeader">箱数</td>  
  12.         <td class="tableHeader">单价</td>  
  13.         <td class="tableHeader">总金额</td>  
  14.         <td class="tableHeader">操作</td>  
  15.     </tr>  
  16.     </thead>  
  17.     <tbody class="tableBody" >  
  18.       
  19.     <c:forEach items="${dataList}" var="o" varStatus="status">  
  20.     <tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >  
  21.         <td><input type="checkbox" name="id" value="${o.id}"/></td>  
  22.         <td>${status.index+1}</td>  
  23.         <td>${o.factoryName}</td>  
  24.         <td>${o.productNo}</td>  
  25.         <td>${o.cnumber}</td>  
  26.         <td>${o.packingUnit}</td>  
  27.         <td>${o.loadingRate }</td>  
  28.         <td>${o.boxNum }</td>  
  29.         <td>${o.price }</td>  
  30.         <td>${o.amount}</td>  
  31.         <td>  
  32.             <a href="${ctx}/cargo/contractproduct/toupdate.action?id=${o.id}">[修改] </a>  
  33.             <a href="${ctx}/cargo/contractproduct/delete.action?id=${o.id}">[删除]</a>  
  34.         </td>  
  35.     </tr>  
  36.     </c:forEach>  
  37.       
  38.     </tbody>  
  39. </table>  

我们选择一项,点击修改


修改其中一个数据,发现修改成功!


实现修改功能成功。

下面我们完成剩下的删除功能
我们的Mapper层已经配置好删除的SQL语句了:
[html] view plaincopy
  1. <!-- 删除一条 -->  
  2. <delete id="deleteById" parameterType="string">  
  3.     delete from contract_product_c  
  4.     where contract_product_id=#{id}  
  5. </delete>  
  6.   
  7.   
  8. <!-- 删除多条(一维字符串数组) -->  
  9. <delete id="delete" parameterType="string">  
  10.     delete from contract_product_c  
  11.     where contract_product_id in  
  12.     <foreach collection="array" item="id" open="(" close=")" separator=",">  
  13.         #{id}  
  14.     </foreach>  
  15. </delete>  

由于我们继承了BaseDao以及BaseImpl,所以我们拥有以下方法:
[java] view plaincopy
  1. public void deleteById(Serializable id) {  
  2.     this.getSqlSession().delete(ns + ".deleteById", id);  
  3. }  
  4.   
  5.   
  6. public void delete(Serializable[] ids) {  
  7.     this.getSqlSession().delete(ns + ".delete", ids);  
  8. }  
所以我们的Dao层不再添加代码

同理,我们的Service层在之前已经写好了delete的方法:
[java] view plaincopy
  1. @Override  
  2. public void delete(Serializable[] ids) {  
  3.     contractProductDao.delete(ids);  
  4. }  
  5.   
  6.   
  7. @Override  
  8. public void deleteById(Serializable id) {  
  9.     contractProductDao.deleteById(id);  
  10. }  
所以我们的Dao层不再添加代码

下面我们来编写Controller层的方法:
[java] view plaincopy
  1. //删除  
  2. @RequestMapping("/cargo/contractproduct/delete.action")  
  3. public String delete(String contractId,String id,Model model){  
  4.     contractProductService.deleteById(id);  
  5.           
  6.     model.addAttribute("contractId", contractId);  
  7.           
  8.     return "redirect:/cargo/contractproduct/tocreate.action";  
  9. }  


删除的链接之前我们写在修改旁边的:
[html] view plaincopy
  1. <td>  
  2.     <a href="${ctx}/cargo/contractproduct/toupdate.action?id=${o.id}">[修改] </a>  
  3.     <a href="${ctx}/cargo/contractproduct/delete.action?id=${o.id}">[删除]</a>  
  4. </td>  

我们现在来测试:

删除成功!


至此,我们的修改和删除方法完成。

0 0
原创粉丝点击