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

重点知识回顾
a)主从结构:
1)它和主表在mapper有什么不同
按对象来映射(hibernate)
按普通字段来映射(mybatis)

b)前台页面的结构

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

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

我们接下来的任务:对货物信息进行修改和删除
先来写修改,我们的Mapper层已经配置好SQL语句了:

<update id="update" parameterType="cn.hpu.jk.domain.ContractProduct">
	update contract_product_c
	<set>
		CONTRACT_ID=#{contractId},
	FACTORY_ID=#{factoryId},
	<if test="factoryName != null">FACTORY_NAME=#{factoryName},</if>
	<if test="productNo != null">PRODUCT_NO=#{productNo},</if>
	<if test="productImage != null">PRODUCT_IMAGE=#{productImage},</if>
	<if test="productDesc != null">PRODUCT_DESC=#{productDesc},</if>
	<if test="cnumber != null">CNUMBER=#{cnumber},</if>
	<if test="outNumber != null">OUT_NUMBER=#{outNumber},</if>
	<if test="loadingRate != null">LOADING_RATE=#{loadingRate},</if>
	<if test="boxNum != null">BOX_NUM=#{boxNum},</if>
	<if test="packingUnit != null">PACKING_UNIT=#{packingUnit},</if>
	<if test="price != null">PRICE=#{price},</if>
	<if test="amount != null">AMOUNT=#{amount},</if>
	<if test="finished != null">FINISHED=#{finished},</if>
	<if test="exts != null">EXTS=#{exts},</if>
	<if test="orderNo != null">ORDER_NO=#{orderNo},</if>
	</set>
	where contract_product_id=#{id}
</update>

由于我们继承了BaseDao以及BaseImpl,所以我们拥有以下方法:

public void update(T entity) {
	this.getSqlSession().update(ns + ".update", entity);
}

所以我们的Dao层不再添加代码

同理,我们的Service层在之前已经写好了update的方法:

@Override
public void update(ContractProduct contractProduct) {

	contractProductDao.update(contractProduct);
}

所以我们的Dao层不再添加代码

下面我们来编写Controller层的方法:

//转向修改页面
@RequestMapping("/cargo/contractproduct/toupdate.action")
public String toupdate(String id,Model model){
	ContractProduct obj=contractProductService.get(id);
	model.addAttribute("obj", obj);

	//准备生产厂家的下拉列表
	List<Factory> factoryList=factoryService.getFactoryList();
	model.addAttribute("factoryList",factoryList);

	return "/cargo/contract/jContractProductUpdate.jsp";//货物的修改页面
}

//修改
@RequestMapping("/cargo/contractproduct/update.action")
public String toupdate(ContractProduct contractProduct,Model model){
	contractProductService.update(contractProduct);

	model.addAttribute("contractId", contractProduct.getContractId());

	return "redirect:/cargo/contractproduct/tocreate.action";
}

接下来使我们的货物修改的jsp页面:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="../../base.jsp"%>
<%@ include file="../../baselist.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>添加货物信息</title>
    <script type="text/javascript">
    	//设置冗余的生产厂家名称
    	function setFactoryName(val){
    		var ele=document.getElementById("factoryName");
    		ele.value=val;
    	}
    </script>
</head>
<body>
<form method="post">
<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
    <div id="navMenubar">
<ul>
<li id="save"><a href="#" onclick="formSubmit('update.action','_self');">确定</a></li>
<li id="back"><a href="${ctx}/cargo/contract/list.action">返回</a></li>
</ul>
    </div>
</div>
</div>
</div>

<div class="textbox" id="centerTextbox">

    <div class="textbox-header">
    <div class="textbox-inner-header">
    <div class="textbox-title">
		修改货物信息
    </div>
    </div>
    </div>
<div>

    <div>
		<table class="commonTable" cellspacing="1">
			<input type="hidden" name="id" value="${obj.id}"/>
			<input type="hidden" name="contractId" value="${obj.contractId}"/>
		        <tr>
		        	<td class="columnTitle_mustbe">厂家名称:</td>
		            <td class="tableContent">
		            <select name="factoryId" onchange="setFactoryName(this.options[this.selectedIndex].text);">
		            	<option value="">--请选择--</option>
		            	<c:forEach items="${factoryList}" var="f">
						<option value="${f.id}" <c:if test="${obj.factoryId==f.id}">selected</c:if>>${f.factoryName }</option>
						</c:forEach>
						<input type="hidden" id="factoryName" name="factoryName" value="${obj.factoryName}"/>
					</select>
                    </td>
		            <td class="columnTitle_mustbe">货号:</td>
		            <td class="tableContent"><input type="text" name="productNo" value="${obj.productNo}"/></td>
		        </tr>

		        <tr>
		        	<td class="columnTitle_mustbe">货物照片:</td>
		            <td class="tableContent"><input type="text" name="productImage" value="${obj.productImage}"/></td>

		        </tr>

		        <tr>
		        	<td class="columnTitle_mustbe">数量</td>
		            <td class="tableContent"><input type="text" name="cnumber" value="${obj.cnumber}"/></td>
		         	<td class="columnTitle_mustbe">装率:</td>
		            <td class="tableContent"><input type="text" name="loadingRate" value="${obj.loadingRate}"/></td>
		        </tr>

		         <tr>
		         	<td class="columnTitle_mustbe">箱数:</td>
		            <td class="tableContent"><input type="text" name="boxNum" value="${obj.boxNum}"/></td>
		         	<td class="columnTitle_mustbe">单价:</td>
		            <td class="tableContent"><input type="text" name="price" value="${obj.price}"/></td>
		        </tr>

		         <tr>
		         	<td class="columnTitle_mustbe">包装单位:</td>
		            <td class="tableContent"><input type="text" name="packingUnit" value="${obj.packingUnit}"/></td>
		            <td class="columnTitle_mustbe">排序号:</td>
		            <td class="tableContent"><input type="text" name="orderNo" value="${obj.orderNo}"/></td>
		        </tr>

		        <tr>
		            <td class="columnTitle_mustbe">货物描述:</td>
		            <td class="tableContent"><textarea  name="productDesc" style="height:200px;width: 400px">
		            ${obj.productDesc}</textarea></td>
		        </tr>
			</table>
	</div>
</div>

</form>
</body>
</html>

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

代码:

<table id="ec_table" class="tableRegion" width="98%" >
	<thead>
	<tr>
		<td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>
		<td class="tableHeader">序号</td>
		<td class="tableHeader">厂家名称</td>
		<td class="tableHeader">货号</td>
		<td class="tableHeader">数量</td>
		<td class="tableHeader">包装单位</td>
		<td class="tableHeader">装率</td>
		<td class="tableHeader">箱数</td>
		<td class="tableHeader">单价</td>
		<td class="tableHeader">总金额</td>
		<td class="tableHeader">操作</td>
	</tr>
	</thead>
	<tbody class="tableBody" >

	<c:forEach items="${dataList}" var="o" varStatus="status">
	<tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >
		<td><input type="checkbox" name="id" value="${o.id}"/></td>
		<td>${status.index+1}</td>
		<td>${o.factoryName}</td>
		<td>${o.productNo}</td>
		<td>${o.cnumber}</td>
		<td>${o.packingUnit}</td>
		<td>${o.loadingRate }</td>
		<td>${o.boxNum }</td>
		<td>${o.price }</td>
		<td>${o.amount}</td>
		<td>
			<a href="${ctx}/cargo/contractproduct/toupdate.action?id=${o.id}">[修改] </a>
			<a href="${ctx}/cargo/contractproduct/delete.action?id=${o.id}">[删除]</a>
		</td>
	</tr>
	</c:forEach>

	</tbody>
</table>

我们选择一项,点击修改

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


实现修改功能成功。

下面我们完成剩下的删除功能
我们的Mapper层已经配置好删除的SQL语句了:

<!-- 删除一条 -->
<delete id="deleteById" parameterType="string">
	delete from contract_product_c
	where contract_product_id=#{id}
</delete>

<!-- 删除多条(一维字符串数组) -->
<delete id="delete" parameterType="string">
	delete from contract_product_c
	where contract_product_id in
	<foreach collection="array" item="id" open="(" close=")" separator=",">
		#{id}
	</foreach>
</delete>

由于我们继承了BaseDao以及BaseImpl,所以我们拥有以下方法:

public void deleteById(Serializable id) {
	this.getSqlSession().delete(ns + ".deleteById", id);
}

public void delete(Serializable[] ids) {
	this.getSqlSession().delete(ns + ".delete", ids);
}

所以我们的Dao层不再添加代码

同理,我们的Service层在之前已经写好了delete的方法:

@Override
public void delete(Serializable[] ids) {
	contractProductDao.delete(ids);
}

@Override
public void deleteById(Serializable id) {
	contractProductDao.deleteById(id);
}

所以我们的Dao层不再添加代码

下面我们来编写Controller层的方法:

//删除
@RequestMapping("/cargo/contractproduct/delete.action")
public String delete(String contractId,String id,Model model){
	contractProductService.deleteById(id);

	model.addAttribute("contractId", contractId);

	return "redirect:/cargo/contractproduct/tocreate.action";
}

删除的链接之前我们写在修改旁边的:

<td>
	<a href="${ctx}/cargo/contractproduct/toupdate.action?id=${o.id}">[修改] </a>
	<a href="${ctx}/cargo/contractproduct/delete.action?id=${o.id}">[删除]</a>
</td>

我们现在来测试:

删除成功!

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

转载请注明出处:http://blog.csdn.net/acmman/article/details/48555485

时间: 2024-07-28 12:29:11

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

【springmvc+mybatis项目实战】杰信商贸-1.项目背景

1.项目背景 杰信项目物流行业的项目, 杰信商贸是国际物流行业一家专门从事进出口玻璃器皿贸易的公司.公司总部位于十一个朝代的帝王之都西安,业务遍及欧美.随着公司不断发展壮大,旧的信息系统已无法满足公司的快速发展需求,妨碍公司成长,在此背景下,公司领导决定研发<杰信商贸综合管理平台>. <杰信商贸综合管理平台>分三期完成.一期完成仓储管理(包括:采购单.仓库.货物.条形码.入库.出库.退货.盘点.库存.库存上限报警.统计查询)和展会管理(包括:展会管理.出单管理),形成货物统一数字化

【springmvc+mybatis项目实战】杰信商贸-13.购销合同列表

我们接下来开始编写购销合同的列表业务 首先我们现往我们的FACTORY_C和基础表中倒入一些数据方便我们测试 导入数据的SQL文件:jk.sql (点击下载) 然后我们看到数据已经插入 启动服务器查看我们的数据已经插入 接下来我们开始做购销合同的业务.首先我们的数据库表已经建立(CONTRACT_C),我们首先创建购销合同的实体类Contract.java: package cn.hpu.jk.domain; import java.util.Date; public class Contrac

【springmvc+mybatis项目实战】杰信商贸-31.出口报运业务-购销合同查询与上报

我们上一篇完成了出口报运增删查修的mapper+Dao+Service+Controller,而且在Controller中添加和获取出口报运的列表的方法,然后成功获取了出口报运的列表: 然后我们这次要添加出口报运的"新增"方法,但是这个"新增"和以往的新增方法不同,这个要与之前的购销合同关联在一起. 我们出口报运的"新增"是这样的: 用户要选择多个合同,然后进行报运.(体现出业务关联) 报运新增时,报运专责只能看到已上报的购销合同. (操作出口报

【springmvc+mybatis项目实战】杰信商贸-11.购销合同业务

生产厂家我们做完了,接下来我们要做一个更加复杂的业务,就是"货运管理" 首先我们先了解一下业务,什么是"货运管理"? "货运管理"是国际物流的概念,往常我们货物送到国内没有那么多事情,但是货物发往国外就多了很多手续,依靠小物流公司我们是很不可能的,需要行业的大背景的支撑.下面我们来看看它是怎么做的 a)业务:购销合同 当我们的客户通过展会.其它渠道跟杰信公司联系上以后,他们看上杰信的货物样品,他们会跟杰信签订一个购买合同(样式要求,货物数量),客

【springmvc+mybatis项目实战】杰信商贸-15.细粒度的权限控制+业务上报取消

上一篇总结我们完成了购销合同的增删改查业务,这一篇我们首先完成权限控制以及业务的上报取消的设置功能. 先说我们的权限控制 1.细粒度的权限控制 a)日常权限框架: 基于角色权限,用户.角色.权限(URL.主菜单.左侧菜单.按钮) b)数据权限: 纵向的数据权限过滤:对数据进行过滤 1)本人(专责):登录后只能看到自己的信息Where条件 create_by = #{当前登录者id} 2)部门(集团公司):登录后登录人是经理级别A.只能看本部门Where条件 create_dept=#{当前登录者

【springmvc+mybatis项目实战】杰信商贸-4.maven依赖+PO对+映射文件

我们来为刚刚创建的数据库表来在工程中创建PO对象 首先我们要创建工程 项目的开发环境 序号 工  具                用  途 1 MyEclipse 2014   IDE 2 JDK 1.7.9        Java虚拟机 3 TOMCAT 7.0.26       中间件 4 Oracle11g/10g.MySQL 5.0.87数据库 5 PL/SQL .SQLyog 8.2SQL控制台 6 apache-maven-3.0.5MAVEN 7 PowerDesigner 15

【springmvc+mybatis项目实战】杰信商贸-8.生产厂家修改

上一次我们做了生产厂家的新增,下面我们来做一下生产厂家的修改 回顾一下我们的FactoryMapper.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

【springmvc+mybatis项目实战】杰信商贸-19.级联删除

我们从写项目开始到现在,一共完成了生产厂家.购销合同.货物(购销合同下的).附件(货物下的)这四大块的大部分业务. 我们的生产厂家.购销合同.货物(购销合同下的).附件(货物下的)这四大块的关系我们来回顾一下: 我们先不管生产厂家(因为它可以和后三个关联关系最弱). 购销合同与货物是一对多的关系,而货物与附件又是一对多的关系.那么购销合同与附件是两层一对多的关系.这里我们要注意,在两层一对多结构中,子表数据不设置外键关联时,就称为僵尸数据. 因为我们的购销合同.货物.附件表虽然都存储有关联关系的

【springmvc+mybatis项目实战】杰信商贸-23.重点知识回顾

1.重点知识回顾 购销合同查看,采用类似hibernate方式,都以对象关联方式. (1)PO为了利用MyBatis性能,在创建时,没有采用关联对象关联,而是将对象关键字段,也就是外键,利用这个普通属性,来记录值,表数据间关联关系存在,但对象关联关系不存在.代码也就变得简单.在货物新增时,只要从主对象中携带过来,主表ID即可. (2)VO为了方便对象关联时取数据.在列表循环货物信息时,要去查询当前货物下的附件时,如果采用上面的方式,只能再次查询.但是我们以对象关联方式,可以直接获取到当前货物下的