【springmvc+mybatis项目实战】杰信商贸-30.出口报运增删查修mapper+Dao+Service+Controller

本文介绍了一种提高查询效率的设计方案——打断设计,并通过实际案例详细讲解了如何在出口报运系统中应用此设计,包括数据库表结构设计、实体类定义、映射文件编写以及各层的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们接下来做我们项目的下一个环节,就是出口报运的业务,首先我们来看看两个设计方式

a)大型项目设计方式
传统设计方式,基于对象关联,数据量小时,系统无碍;当数据随着系统的使用,线性增长,系统变的越来越慢,到达一定数据量时,性能急剧下降。

b)新的设计方式:打断设计
在表中增加一个字段,这个字段用来存储关联表的主键集合;在报运业务中要查询合同下的货物信息。直接通过这个关联字段,利用in子查询直接去查询货物表,这样查询效率提高很多。而且数据量越大,查询效率越高。这种方式,业务关联层级越多,这种设计方式的性能体现越高。而且通过这种方式可以实现跳跃查询。

那么打断设计具体如何实现呢?我们通过写我们的出口报运项目来实践它。

1,货运管理报运新增
用户要选择多个合同,然后进行报运。(体现出业务关联)
报运新增时,报运专责只能看到已上报的购销合同。

我们先把我们的“报运单”、“报运下的货物”、“报运下的附件”三张表导入到PL/SQL中:
[sql]  view plain copy
  1. create table EXPORT_C  (  
  2.    EXPORT_ID            VARCHAR2(40)                    not null,  
  3.    INPUT_DATE           TIMESTAMP,  
  4.    CONTRACT_IDS         VARCHAR2(500),  
  5.    CUSTOMER_CONTRACT    VARCHAR2(200),  
  6.    LCNO                 VARCHAR2(10),  
  7.    CONSIGNEE            VARCHAR2(100),  
  8.    MARKS                VARCHAR2(1000),  
  9.    REMARK               VARCHAR2(100),  
  10.    SHIPMENT_PORT        VARCHAR2(100),  
  11.    DESTINATION_PORT     VARCHAR2(100),  
  12.    TRANSPORT_MODE       VARCHAR2(10),  
  13.    PRICE_CONDITION      VARCHAR2(10),  
  14.    STATE                INT,  
  15.    GROSS_WEIGHT         NUMBER(5,2),  
  16.    NET_WEIGHT           NUMBER(5,2),  
  17.    MEASUREMENT          NUMBER(8,2),  
  18.    CREATE_BY            VARCHAR2(40),  
  19.    CREATE_DEPT          VARCHAR2(40),  
  20.    CREATE_TIME          TIMESTAMP,  
  21.    constraint PK_EXPORT_C primary key (EXPORT_ID)  
  22. );  
  23.   
  24.   
  25. create table EXPORT_PRODUCT_C  (  
  26.    EXPORT_PRODUCT_ID    VARCHAR2(40)                    not null,  
  27.    EXPORT_ID            VARCHAR2(40),  
  28.    FACTORY_ID           VARCHAR2(40),  
  29.    FACTORY_NAME         VARCHAR2(50),  
  30.    PRODUCT_NO           VARCHAR2(50),  
  31.    PACKING_UNIT         VARCHAR2(10),  
  32.    CNUMBER              INT,  
  33.    BOX_NUM              INT,  
  34.    GROSS_WEIGHT         NUMBER(8,2),  
  35.    NET_WEIGHT           NUMBER(8,2),  
  36.    SIZE_LENGTH          NUMBER(8,2),  
  37.    SIZE_WIDTH           NUMBER(8,2),  
  38.    SIZE_HEIGHT          NUMBER(8,2),  
  39.    EX_PRICE             NUMBER(8,2),  
  40.    PRICE                NUMBER(10,2),  
  41.    TAX                  NUMBER(8,2),  
  42.    ORDER_NO             INT,  
  43.    constraint PK_EXPORT_PRODUCT_C primary key (EXPORT_PRODUCT_ID)  
  44. );  
  45.   
  46.   
  47. create table EXT_EPRODUCT_C  (  
  48.    EXT_EPRODUCT_ID      VARCHAR2(40)                    not null,  
  49.    EXPORT_PRODUCT_ID    VARCHAR2(40),  
  50.    FACTORY_ID           VARCHAR2(40),  
  51.    FACTORY_NAME         VARCHAR2(50),  
  52.    CTYPE                INT,  
  53.    PRODUCT_NO           VARCHAR2(50),  
  54.    PRODUCT_IMAGE        VARCHAR2(200),  
  55.    PRODUCT_DESC         VARCHAR2(600),  
  56.    CNUMBER              INT,  
  57.    PACKING_UNIT         VARCHAR2(10),  
  58.    PRICE                NUMBER(10,2),  
  59.    AMOUNT               NUMBER(10,2),  
  60.    PRODUCT_REQUEST      VARCHAR2(2000),  
  61.    ORDER_NO             INT,  
  62.    constraint PK_EXT_EPRODUCT_C primary key (EXT_EPRODUCT_ID)  
  63. );  

创建成功:



我们接下来开始做后台,首先编写出口报运的实体类:
[java]  view plain copy
  1. package cn.hpu.jk.domain;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class Export {  
  6.     private String id;  
  7.     private Date inputDate;  
  8.       
  9.     private String epnum;  
  10.     private String extnum;  
  11.       
  12.     private String contractIds;//打断设计,合同的ID集合  
  13.     private String customerContract;//合同及确认书号  
  14.     private String lcno;//信用证号  
  15.     private String consignee;//收货人及地址  
  16.     private String marks;//唛头  
  17.     private String remark;  
  18.     private String shipmentPort;//装运港  
  19.     private String destinationPort;//目的港  
  20.     private String transportMode;//运输方式  
  21.     private String priceCondition;//价格条件  
  22.     //state状态,为了流程跟踪(0-草稿,1-已上报,2-装修,3-委托,4-发票,5-财务)  
  23.     private Integer state;  
  24.     private Double grossWeight; //毛重  
  25.     private Double netWeight;//净重   
  26.     private String measurement;//体积(中间计算)  
  27.       
  28.     private String createBy;  
  29.     private String creatDept;  
  30.     private java.util.Date creatTime;  
  31.       
  32.     //get和set方法省略  
  33. }  

下面做我们的映射文件ExportMapper.xml,我们添加增删查修的SQL语句:
[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper  
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5.   
  6. <mapper namespace="cn.hpu.jk.mapper.ExportMapper">  
  7.     <resultMap type="cn.hpu.jk.domain.Export" id="exportRM">  
  8.         <id property="id" column="EXPORT_ID"/>  
  9.           
  10.         <!-- 虚拟字段 -->  
  11.         <result property="epnum" column="EPNUM"/>  
  12.         <result property="extnum" column="EXTNUM"/>  
  13.           
  14.         <result property="inputDate" column="INPUT_DATE"/>  
  15.         <result property="contractIds" column="CONTRACT_IDS"/>  
  16.         <result property="customerContract" column="CUSTOMER_CONTRACT"/>  
  17.         <result property="lcno" column="LCNO"/>  
  18.         <result property="consignee" column="CONSIGNEE"/>  
  19.         <result property="marks" column="MARKS"/>  
  20.         <result property="remark" column="REMARK"/>  
  21.         <result property="shipmentPort" column="SHIPMENT_PORT"/>  
  22.         <result property="destinationPort" column="DESTINATION_PORT"/>  
  23.         <result property="transportMode" column="TRANSPORT_MODE"/>  
  24.         <result property="priceCondition" column="PRICE_CONDITION"/>  
  25.         <result property="grossWeight" column="GROSS_WEIGHT"/>  
  26.         <result property="netWeight" column="NET_WEIGHT"/>  
  27.         <result property="measurement" column="MEASUREMENT"/>  
  28.         <result property="state" column="STATE"/>  
  29.           
  30.         <result property="createBy" column="CREATE_BY"/>  
  31.         <result property="createDept" column="CREATE_DEPT"/>  
  32.         <result property="createTime" column="CREATE_TIME"/>  
  33.     </resultMap>  
  34.       
  35.     <select id="find" parameterType="map" resultMap="exportRM">  
  36.         select   
  37.         (select count(*) from export_product_c  
  38.         where export_id=e.export_id)  as epnum,  
  39.         (select count(*) from ext_eproduct_c  
  40.            where export_product_id in   
  41.            (select export_product_id from export_product_c   
  42.            where export_id=e.export_id)  
  43.         )as extnum,  
  44.         e.export_id,e.input_date,e.contract_ids,e.customer_contract,e.lcno,  
  45.         e.consignee,e.marks,e.remark,e.shipment_port,e.destination_port,  
  46.         e.transport_mode,e.price_condition,e.gross_weight,e.net_weight,e.measurement,e.state  
  47.         from export_c e  
  48.     </select>  
  49.       
  50.     <select id="get" parameterType="cn.hpu.jk.domain.Export" resultMap="exportRM">  
  51.         select * from export_c  
  52.         where export_id=#{pid}  
  53.     </select>  
  54.       
  55.     <insert id="insert" parameterType="cn.hpu.jk.domain.Export">  
  56.         insert into export_c  
  57.         (EXPORT_ID,INPUT_DATE,CONTRACT_IDS,CUSTOMER_CONTRACT,LCNO,CONSIGNEE,MARKS,  
  58.             REMARK,SHIPMENT_PORT,DESTINATION_PORT,TRANSPORT_MODE,PRICE_CONDITION,  
  59.             GROSS_WEIGHT,NET_WEIGHT,MEASUREMENT,STATE,CREATE_BY,CREATE_DEPT,CREATE_TIME)  
  60.         values  
  61.         (  
  62.             #{id},  
  63.             #{inputDate, jdbcType=TIMESTAMP},  
  64.             #{contractIds, jdbcType=VARCHAR},  
  65.             #{customerContract, jdbcType=VARCHAR},  
  66.             #{lcno, jdbcType=VARCHAR},  
  67.             #{consignee, jdbcType=VARCHAR},  
  68.             #{marks, jdbcType=VARCHAR},  
  69.             #{remark, jdbcType=VARCHAR},  
  70.             #{shipmentPort, jdbcType=VARCHAR},  
  71.             #{destinationPort, jdbcType=VARCHAR},  
  72.             #{transportMode, jdbcType=VARCHAR},  
  73.             #{priceCondition, jdbcType=VARCHAR},  
  74.             #{grossWeight, jdbcType=DOUBLE},  
  75.             #{netWeight, jdbcType=DOUBLE},  
  76.             #{measurement, jdbcType=DOUBLE},  
  77.             #{state, jdbcType=INTEGER},  
  78.               
  79.             #{createBy, jdbcType=VARCHAR},  
  80.             #{createDept, jdbcType=VARCHAR},  
  81.             #{createTime, jdbcType=TIMESTAMP}  
  82.         )  
  83.     </insert>  
  84.       
  85.     <update id="update" parameterType="cn.hpu.jk.domain.Export">  
  86.         update export_c  
  87.         <set>  
  88.             <if test="inputDate != null"> INPUT_DATE=#{inputDate},</if>  
  89.             <if test="contractIds != null"> CONTRACT_IDS=#{contractIds},</if>  
  90.             <if test="customerContract != null"> CUSTOMER_CONTRACT=#{customerContract},</if>  
  91.             <if test="lcno != null"> LCNO=#{lcno},</if>  
  92.             <if test="consignee != null"> CONSIGNEE=#{consignee},</if>  
  93.             <if test="marks != null"> MARKS=#{marks},</if>  
  94.             <if test="remark != null"> REMARK=#{remark},</if>  
  95.             <if test="shipmentPort != null"> SHIPMENT_PORT=#{shipmentPort},</if>  
  96.             <if test="destinationPort != null"> DESTINATION_PORT=#{destinationPort},</if>  
  97.             <if test="transportMode != null"> TRANSPORT_MODE=#{transportMode},</if>  
  98.             <if test="priceCondition != null"> PRICE_CONDITION=#{priceCondition},</if>  
  99.             <if test="grossWeight != null"> GROSS_WEIGHT=#{grossWeight},</if>  
  100.             <if test="netWeight != null"> NET_WEIGHT=#{netWeight},</if>  
  101.             <if test="measurement != null"> MEASUREMENT=#{measurement},</if>  
  102.         </set>  
  103.         where export_id=#{id}  
  104.     </update>  
  105.       
  106.     <!-- 删除一条 -->  
  107.     <delete id="deleteById" parameterType="string">  
  108.         delete from export_c  
  109.         where export_id=#{pid}  
  110.     </delete>  
  111.       
  112.     <!-- 删除多条(一维字符串数组) -->  
  113.     <delete id="delete" parameterType="string">  
  114.         delete from export_c  
  115.         where export_id in  
  116.         <foreach collection="array" item="id" open="(" close=")" separator=",">  
  117.             #{id}  
  118.         </foreach>  
  119.     </delete>  
  120.       
  121.     <!-- 修改状态 -->  
  122.     <update id="updateState" parameterType="map">  
  123.         update export_c set state=#{state}  
  124.         where export_id in  
  125.         <foreach collection="ids" item="id" open="(" close=")" separator=",">  
  126.             #{id}  
  127.         </foreach>  
  128.     </update>  
  129. </mapper>  

接下来写我们的Dao层:
ExportDao.java:
[java]  view plain copy
  1. package cn.hpu.jk.dao;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import cn.hpu.jk.domain.Contract;  
  6.   
  7. public interface ExportDao extends BaseDao<Export>{  
  8.     //我们这里可以直接使用继承的BaseDao的增删改查方法  
  9.     //创建一系列其它Dao的原因是因为其它Dao有可能需要拓展  
  10.       
  11.     public void updateState(Map map);//修改状态  
  12. }  

ExportDaoImpl.java:
[java]  view plain copy
  1. package cn.hpu.jk.dao.impl;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import org.springframework.stereotype.Repository;  
  6.   
  7. import cn.hpu.jk.dao.ExportDao;  
  8. import cn.hpu.jk.domain.Export;  
  9.   
  10.   
  11. @Repository //为了包扫描的时候这个Dao被扫描到  
  12. public class ExportDaoImpl extends BaseDaoImpl<Export> implements ExportDao{  
  13.       
  14.     public ExportDaoImpl(){  
  15.         //设置命名空间  
  16.         super.setNs("cn.hpu.jk.mapper.ExportMapper");  
  17.     }  
  18.   
  19.   
  20.     @Override  
  21.     public void updateState(Map map) {  
  22.         super.getSqlSession().update(super.getNs()+".updateState", map);  
  23.     }  
  24.   
  25.   
  26. }  

都继承了BaseDao和BaseDaoImpl(包含了基本的增删改查的方法以及方法的实现),回顾一下BaseDao和BaseDaoImpl:
BaseDao:
[java]  view plain copy
  1. package cn.hpu.jk.dao;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import cn.hpu.jk.pagination.Page;  
  8.   
  9. /** 
  10.  * @Description: 泛型类,基础的DAO接口 
  11.  */  
  12. public interface BaseDao<T> {  
  13.     public List<T> findPage(Page page);               //分页查询  
  14.     public List<T> find(Map paraMap);             //带条件查询,条件可以为null,既没有条件;返回list对象集合  
  15.     public T get(Serializable id);                  //只查询一个,常用于修改  
  16.     public void insert(T entity);                   //插入,用实体作为参数  
  17.     public void update(T entity);                   //修改,用实体作为参数  
  18.     public void deleteById(Serializable id);        //按id删除,删除一条;支持整数型和字符串类型ID  
  19.     public void delete(Serializable[] ids);         //批量删除;支持整数型和字符串类型ID  
  20. }  

BaseDaoImpl:
[java]  view plain copy
  1. package cn.hpu.jk.dao.impl;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import org.apache.ibatis.session.SqlSessionFactory;  
  8. import org.mybatis.spring.support.SqlSessionDaoSupport;  
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10.   
  11. import cn.hpu.jk.dao.BaseDao;  
  12. import cn.hpu.jk.pagination.Page;  
  13.   
  14. public abstract class BaseDaoImpl<T> extends SqlSessionDaoSupport implements BaseDao<T>{  
  15.     @Autowired  
  16.     //mybatis-spring 1.0无需此方法;mybatis-spring1.2必须注入。  
  17.     public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){  
  18.         super.setSqlSessionFactory(sqlSessionFactory);  
  19.     }  
  20.       
  21.     private String ns;      //命名空间  
  22.     public String getNs() {  
  23.         return ns;  
  24.     }  
  25.     public void setNs(String ns) {  
  26.         this.ns = ns;  
  27.     }  
  28.       
  29.     public List<T> findPage(Page page){  
  30.         List<T> oList = this.getSqlSession().selectList(ns + ".findPage", page);  
  31.         return oList;  
  32.     }  
  33.   
  34.   
  35.     public List<T> find(Map map) {  
  36.         List<T> oList = this.getSqlSession().selectList(ns + ".find", map);  
  37.         return oList;  
  38.     }  
  39.     public T get(Serializable id) {  
  40.         return this.getSqlSession().selectOne(ns + ".get", id);  
  41.     }  
  42.   
  43.   
  44.     public void insert(T entity) {  
  45.         this.getSqlSession().insert(ns + ".insert", entity);  
  46.     }  
  47.   
  48.   
  49.     public void update(T entity) {  
  50.         this.getSqlSession().update(ns + ".update", entity);  
  51.     }  
  52.   
  53.   
  54.     public void deleteById(Serializable id) {  
  55.         this.getSqlSession().delete(ns + ".deleteById", id);  
  56.     }  
  57.   
  58.   
  59.     public void delete(Serializable[] ids) {  
  60.         this.getSqlSession().delete(ns + ".delete", ids);  
  61.     }  
  62. }  

然后使我们的Service层:
ExportService.java:
[java]  view plain copy
  1. package cn.hpu.jk.service;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import cn.hpu.jk.domain.Export;  
  8. import cn.hpu.jk.pagination.Page;  
  9.   
  10.   
  11. public interface ExportService {  
  12.     public List<Export> findPage(Page page);  //分页查询  
  13.     public List<Export> find(Map paraMap);        //带条件查询,条件可以为null,既没有条件;返回list对象集合  
  14.     public Export get(Serializable id);             //只查询一个,常用于修改     
  15.     public void insert(Export export);      //插入,用实体作为参数  
  16.     public void update(Export export);      //修改,用实体作为参数  
  17.     public void deleteById(Serializable id);    //按id删除,删除一条;支持整数型和字符串类型ID  
  18.     public void delete(Serializable[] ids); //批量删除;支持整数型和字符串类型ID  
  19.   
  20.   
  21.     public void submit(Serializable[] ids);//上报  
  22.     public void cancel(Serializable[] ids);//取消  
  23. }  

ExportServiceImpl:
[java]  view plain copy
  1. package cn.hpu.jk.service.impl;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import javax.annotation.Resource;  
  9.   
  10. import cn.hpu.jk.dao.ExportDao;  
  11. import cn.hpu.jk.domain.Export;  
  12. import cn.hpu.jk.pagination.Page;  
  13. import cn.hpu.jk.service.ExportService;  
  14.   
  15.   
  16. public class ExportServiceImpl implements ExportService{  
  17.   
  18.   
  19.     @Resource  
  20.     ExportDao exportDao;  
  21.   
  22.   
  23.     @Override  
  24.     public List<Export> find(Map paraMap) {  
  25.         // TODO Auto-generated method stub  
  26.         return exportDao.find(paraMap);  
  27.     }  
  28.   
  29.   
  30.     @Override  
  31.     public List<Export> findPage(Page page) {  
  32.         // TODO Auto-generated method stub  
  33.         return exportDao.findPage(page);  
  34.     }  
  35.   
  36.   
  37.     @Override  
  38.     public Export get(Serializable id) {  
  39.         // TODO Auto-generated method stub  
  40.         return exportDao.get(id);  
  41.     }  
  42.   
  43.   
  44.     @Override  
  45.     public void insert(Export export) {  
  46.         exportDao.insert(export);  
  47.           
  48.     }  
  49.   
  50.   
  51.     @Override  
  52.     public void update(Export export) {  
  53.         exportDao.update(export);  
  54.           
  55.     }  
  56.       
  57.   
  58.   
  59.     @Override  
  60.     public void delete(Serializable[] ids) {  
  61.         exportDao.delete(ids);  
  62.     }  
  63.   
  64.   
  65.     @Override  
  66.     public void deleteById(Serializable id) {  
  67.         exportDao.deleteById(id);  
  68.           
  69.     }  
  70.   
  71.   
  72.     @Override  
  73.     public void submit(Serializable[] ids) {  
  74.          Map map=new HashMap();  
  75.          map.put("state",1);//1启用  
  76.          map.put("ids", ids);  
  77.            
  78.          exportDao.updateState(map);  
  79.     }  
  80.       
  81.     @Override  
  82.     public void cancel(Serializable[] ids) {  
  83.         Map map=new HashMap();  
  84.          map.put("state",0);//0启用  
  85.          map.put("ids", ids);  
  86.            
  87.          exportDao.updateState(map);  
  88.           
  89.     }  
  90. }  


我们的update方法和插入方法后期还要继续完善,这里我们先简单的写一下。

然后使我们的Controller层:
[java]  view plain copy
  1. package cn.hpu.jk.controller.cargo.export;  
  2.   
  3. import java.util.List;  
  4.   
  5. import javax.annotation.Resource;  
  6.   
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.ui.Model;  
  9. import org.springframework.web.bind.annotation.RequestMapping;  
  10.   
  11.   
  12. import cn.hpu.jk.controller.BaseController;  
  13. import cn.hpu.jk.domain.Export;  
  14. import cn.hpu.jk.service.ExportService;  
  15.   
  16.   
  17. @Controller  
  18. public class ExportController extends BaseController{  
  19.       
  20.     @Autowired  
  21.     ExportService exportService;  
  22.       
  23.     @RequestMapping("/cargo/export/list.action")  
  24.     public String list(Model model){  
  25.         List<Export> dataList=exportService.find(null);  
  26.         model.addAttribute("dataList", dataList);  
  27.           
  28.         return "/cargo/export/jExportList.jsp";  
  29.     }  
  30.       
  31. }  


我们在beans-service.xml中注入exportService:
[html]  view plain copy
  1. <bean name="exportService" class="cn.hpu.jk.service.impl.ExportServiceImpl"/>  

我们这里先写一个获取出口报运信息列表的方法,然后我们写一个Jsp页面来显示出口报运信息列表:
jExportList.jsp:
[html]  view plain copy
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ include file="../../baselist.jsp"%>  
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>  
  4. <html xmlns="http://www.w3.org/1999/xhtml">  
  5. <head>  
  6.     <title></title>  
  7. </head>  
  8.   
  9.   
  10. <body>  
  11. <form name="icform" method="post">  
  12.   
  13.   
  14. <div id="menubar">  
  15. <div id="middleMenubar">  
  16. <div id="innerMenubar">  
  17.   <div id="navMenubar">  
  18.     
  19.     <ul>  
  20.     <li id="view"><a href="#" onclick="formSubmit('toview.action','_self');this.blur();">查看</a></li>  
  21.     <li id="new"><a href="#" onclick="formSubmit('tocreate.action','_self');this.blur();">添加</a></li>  
  22.     <li id="update"><a href="#" onclick="formSubmit('toupdate.action','_self');this.blur();">修改</a></li>  
  23.     <li id="delete"><a href="#" onclick="formSubmit('delete.action','_self');this.blur();">删除</a></li>  
  24.     <li id="new"><a href="#" onclick="formSubmit('submit.action','_self');this.blur();">上报</a></li>  
  25.     <li id="new"><a href="#" onclick="formSubmit('cancel.action','_self');this.blur();">取消</a></li>  
  26.     </ul>  
  27.   
  28.   
  29.   </div>  
  30. </div>  
  31. </div>  
  32. </div>  
  33.      
  34. <!-- 页面主体部分(列表等) -->    
  35. <div class="textbox" id="centerTextbox">  
  36.   <div class="textbox-header">  
  37.   <div class="textbox-inner-header">  
  38.   <div class="textbox-title">  
  39.     出口报运列表  
  40.   </div>   
  41.   </div>  
  42.   </div>  
  43.     
  44. <div>  
  45. <div class="eXtremeTable" >  
  46. <table id="ec_table" class="tableRegion" width="98%" >  
  47.     <thead>  
  48.     <tr>  
  49.         <td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>  
  50.         <td class="tableHeader">序号</td>  
  51.         <td class="tableHeader">合同或确认书号</td>  
  52.         <td class="tableHeader">信用证号</td>  
  53.         <td class="tableHeader">货物数/附件数</td>  
  54.         <td class="tableHeader">收货人及地址</td>  
  55.         <td class="tableHeader">装运港</td>  
  56.         <td class="tableHeader">目的港</td>  
  57.         <td class="tableHeader">运输方式</td>  
  58.         <td class="tableHeader">价格条件</td>  
  59.         <td class="tableHeader">制单日期</td>  
  60.         <td class="tableHeader">状态</td>  
  61.     </tr>  
  62.     </thead>  
  63.     <tbody class="tableBody" >  
  64.       
  65.     <c:forEach items="${dataList}" var="o" varStatus="status">  
  66.     <tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >  
  67.         <td><input type="checkbox" name="id" value="${o.id}"/></td>  
  68.         <td>${status.index+1}</td>  
  69.         <td><a href="toview.action?id=${o.id}">${o.customerContract}</a></td>  
  70.         <td>${o.lcno}</td>  
  71.         <td>${o.epnum }/${o.extnum }</td>  
  72.         <td>${o.consignee}</td>  
  73.         <td>${o.shipmentPort}</td>  
  74.         <td>${o.destinationPort}</td>  
  75.         <td>${o.transportMode}</td>  
  76.         <td>${o.priceCondition}</td>  
  77.         <td><fmt:formatDate value="${o.inputDate}" pattern="yyyy-MM-dd"/></td>  
  78.         <td>${o.totalAmount}</td>  
  79.         <td>  
  80.             <c:if test="${o.state==1}"><font color="green">已上报</font></c:if>  
  81.             <c:if test="${o.state==0}">草稿</a></c:if>  
  82.         </td>  
  83.     </tr>  
  84.     </c:forEach>  
  85.       
  86.     </tbody>  
  87. </table>  
  88. </div>  
  89.    
  90. </div>  
  91.    
  92.    
  93. </form>  
  94. </body>  
  95. </html>  

我们的数据入口,在left.jsp中添加“出口报运”的链接:
[html]  view plain copy
  1. <ul>  
  2.     <li><a href="${ctx }/cargo/contract/list.action" onclick="linkHighlighted(this)" target="main" id="aa_1">购销合同</a></li>  
  3.     <li><a href="${ctx }/cargo/outproduct/toedit.action" onclick="linkHighlighted(this)" target="main" id="aa_1">出货表</a></li>  
  4.     <li><a href="${ctx }/cargo/export/list.action" onclick="linkHighlighted(this)" target="main" id="aa_1">出口报运</a></li>  
  5. </ul>  

效果如:



我们先加一些测试数据,然后点击出口报运,获取列表:


至此我们的出口报运的增删改查的Mapper以及Dao还有Service以及Controller层的编写,list列表获取的方法。我们下一次开始编写出口报运的其他业务方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值