【springmvc+mybatis项目实战】杰信商贸-18.附件分类基础表+数据字典

上一篇我们附件的增删改查功能全部完成。但是我们的附件有一个字段叫做“类型”(ctype),这里我们要使用数据字典,所以对于这一块我们要进行修改。

首先介绍一下数据字典

数据字典
它是一个通用结构,跟业务无关;数据字典表是用户可以动态扩充内容。它的分类用户不能改。分类是系统上线时,开发人员进行初始化。(分类是在代码中写死的,分类下的内容,用户可以动态扩充)

a)一般它由编号+名称构成。
1)性别:0101男,0102女
2)包装单位:0201 PCS,0202 SETS
3)区县:02901西安市 02902宝鸡市
通用的数据字典,它可以存放多个分类,结构必须是ID+NAME
TYPE+ID+NAME 

b)数据字典都在哪里使用?
单选的组合;下拉框

我们附件的类型就是由数据字典来决定的
这里是我们的数据字典表


可以观察到我们附件的类型的数据字典在其中:


查询一下我们的附件的数据字典
(查询的sql语句为select order_no,name from sys_code_b
where parent_id ='0104')



那么,下面我们就专门针对数据字典创建一套业务,首先攥写它的实体类SysCode.java:
package cn.hpu.jk.domain;

public class SysCode {
	private String id;
	private Integer orderNo;
	private String name;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public Integer getOrderNo() {
		return orderNo;
	}
	public void setOrderNo(Integer orderNo) {
		this.orderNo = orderNo;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

然后编写它的Mapper映射文件SysCodeMapper.xml:
(由于我们的数据字典表暂时只用于查询,所以我们无需添加增删改的sql配置)
<?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">


<mapper namespace="cn.hpu.jk.mapper.SysCodeMapper">
	<resultMap type="cn.hpu.jk.domain.SysCode" id="sysCodeRM">
		<id property="id" column="SYS_CODE_ID"/>
		<id property="orderNo" column="ORDER_NO"/>
		<id property="name" column="NAME"/>
	</resultMap>
	
	<!-- 查询某个分类下的内容 -->
	<select id="find" parameterType="map" resultMap="sysCodeRM">
		select sys_code_id,order_no,name from sys_code_b
		where 1=1
		<if test="parentId != null"> and PARENT_ID=#{parentId}</if>
	</select>
	
</mapper>

我们在给它写一个Dao层
SysCodeDao.java
package cn.hpu.jk.dao;

import cn.hpu.jk.domain.SysCode;

public interface SysCodeDao extends BaseDao<SysCode>{
	
}

SysCodeDaoImpl.java:
package cn.hpu.jk.dao.impl;

import org.springframework.stereotype.Repository;

import cn.hpu.jk.dao.SysCodeDao;
import cn.hpu.jk.domain.SysCode;


@Repository //为了包扫描的时候这个Dao被扫描到
public class SysCodeDaoImpl extends BaseDaoImpl<SysCode> implements SysCodeDao{
	
	public SysCodeDaoImpl(){
		//设置命名空间
		super.setNs("cn.hpu.jk.mapper.SysCodeMapper");
	}


}

接下来是Service层:
SysCodeService.java:
package cn.hpu.jk.service;

import java.util.List;
import java.util.Map;

import cn.hpu.jk.domain.SysCode;

public interface SysCodeService {
	public List<SysCode> find(Map paraMap);	//查询
}

SysCodeServiceImpl.java:
package cn.hpu.jk.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import cn.hpu.jk.dao.SysCodeDao;
import cn.hpu.jk.domain.SysCode;
import cn.hpu.jk.service.SysCodeService;


public class SysCodeServiceImpl implements SysCodeService{


	@Resource
	SysCodeDao sysCodeDao;


	@Override
	public List<SysCode> find(Map paraMap) {
		return sysCodeDao.find(paraMap);
	}
}

我们实际直接使用它的Dao都是可以的,但是我们加了Service以防以后的拓展。

这里我们在附件的Service接口中添加获取数据字典的分类列表的方法(getCtypeList();):
package cn.hpu.jk.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import cn.hpu.jk.domain.ExtCproduct;
import cn.hpu.jk.domain.SysCode;
import cn.hpu.jk.pagination.Page;


public interface ExtCproductService {
	public List<ExtCproduct> findPage(Page page);	//分页查询
	public List<ExtCproduct> find(Map paraMap);		//带条件查询,条件可以为null,既没有条件;返回list对象集合
	public ExtCproduct get(Serializable id);				//只查询一个,常用于修改
	public void insert(ExtCproduct extCproduct);		//插入,用实体作为参数
	public void update(ExtCproduct extCproduct);		//修改,用实体作为参数
	public void deleteById(Serializable id);	//按id删除,删除一条;支持整数型和字符串类型ID
	public void delete(Serializable[] ids);	//批量删除;支持整数型和字符串类型ID
	
	public List<SysCode> getCtypeList(); //获取分类列表
}

然后在附件的Service实现方法中来实现getCtypeList()方法:
package cn.hpu.jk.service.impl;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.hpu.jk.Util.UtilFuns;
import cn.hpu.jk.dao.ExtCproductDao;
import cn.hpu.jk.dao.SysCodeDao;
import cn.hpu.jk.domain.ExtCproduct;
import cn.hpu.jk.domain.SysCode;
import cn.hpu.jk.pagination.Page;
import cn.hpu.jk.service.ExtCproductService;


@Service
public class ExtCproductServiceImpl implements ExtCproductService{
	
	@Resource
	ExtCproductDao extCproductDao;
	@Resource
	SysCodeDao sysCodeDao;
	
	//中间其它代码省略......	


	@Override
	public List<SysCode> getCtypeList() {
		Map paraMap=new HashMap();
		paraMap.put("parentId", "0104");//0104是附件表的分类
		return sysCodeDao.find(paraMap);
	}


}

分类获取工作做完,我们在附件的Controller的新增和修改方法中获取分类列表,用于在jsp界面的分类下拉菜单中填充分类值:
//转向新增页面
@RequestMapping("/cargo/extcproduct/tocreate.action")
public String tocreate(String contractProductId,Model model){
	//传递购销合同Id
	model.addAttribute("contractProductId", contractProductId);
	
	//准备生产厂家的下拉列表
	List<Factory> factoryList=factoryService.getFactoryList();
	model.addAttribute("factoryList",factoryList);
	
	//某个货物下的附件
	Map<String,String> paraMap=new HashMap<String,String>();
	paraMap.put("contractProductId", contractProductId);
	List<ExtCproduct> dataList=extCproductService.find(paraMap);
	model.addAttribute("dataList", dataList);
	
	//准备分类下拉列表
	List<SysCode> ctypeList=extCproductService.getCtypeList();
	model.addAttribute("ctypeList", ctypeList);
	
	return "/cargo/contract/jExtCproductCreate.jsp";//货物的新增页面
}

//转向修改页面
@RequestMapping("/cargo/extcproduct/toupdate.action")
public String toupdate(String id,Model model){
	ExtCproduct obj=extCproductService.get(id);
	model.addAttribute("obj", obj);
	
	//准备生产厂家的下拉列表
	List<Factory> factoryList=factoryService.getFactoryList();
	model.addAttribute("factoryList",factoryList);
	
	//准备分类下拉列表
	List<SysCode> ctypeList=extCproductService.getCtypeList();
	model.addAttribute("ctypeList", ctypeList);
	
	return "/cargo/contract/jExtCproductUpdate.jsp";//货物的修改页面
}

然后我们把编辑附件的jsp界面中之前的分类input款改为下拉select框,然后利用C标签的遍历将分类值分布至select框的每个option选项中:
(下面代码更改的部分是ctype部分)
<%@ 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="#" οnclick="formSubmit('insert.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="contractProductId" value="${contractProductId}"/>
		        <tr>
		        	<td class="columnTitle_mustbe">厂家名称:</td>
		            <td class="tableContent">
		            <select name="factoryId" οnchange="setFactoryName(this.options[this.selectedIndex].text);">
		            	<option value="">--请选择--</option>
		            	<c:forEach items="${factoryList}" var="f">
						<option value="${f.id}">${f.factoryName }</option>
						</c:forEach>
						<input type="hidden" id="factoryName" name="factoryName" value=""/>
					</select>
                    </td>
		            <td class="columnTitle_mustbe">货号:</td>
		            <td class="tableContent"><input type="text" name="productNo" /></td>
		        </tr>
		        
		        <tr>
		        	<td class="columnTitle_mustbe">货物照片:</td>
		            <td class="tableContent"><input type="text" name="productImage" /></td>
		            <td class="columnTitle_mustbe">分类</td>
		            <td class="tableContent">
						<select name="ctype">
		            	<option value="">--请选择--</option>
		            	<c:forEach items="${ctypeList}" var="cl">
						<option value="${cl.orderNo}">${cl.name }</option>
						</c:forEach>
						</select>
					</td>
		        </tr>
		        
		        <tr>
		        	<td class="columnTitle_mustbe">数量</td>
		            <td class="tableContent"><input type="text" name="cnumber" /></td>
		         	<td class="columnTitle_mustbe">单价:</td>
		            <td class="tableContent"><input type="text" name="price" /></td>
		        </tr>
		        
		         <tr>
		         	<td class="columnTitle_mustbe">包装单位:</td>
		            <td class="tableContent"><input type="text" name="packingUnit" /></td>
		            <td class="columnTitle_mustbe">排序号:</td>
		            <td class="tableContent"><input type="text" name="orderNo" /></td>
		        </tr>
		        
		        <tr>
		            <td class="columnTitle_mustbe">货物描述:</td>
		            <td class="tableContent"><textarea  name="productDesc" style="height:200px;width: 400px"></textarea></td>
		            <td class="columnTitle_mustbe">要求:</td>
		            <td class="tableContent"><textarea  name="productRequest" style="height:200px;width: 400px"></textarea></td>
		        </tr>
			</table>
	</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 class="eXtremeTable" >
<table id="ec_table" class="tableRegion" width="98%" >
	<thead>
	<tr>
		<td class="tableHeader"><input type="checkbox" name="selid" οnclick="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>
	</tr>
	</thead>
	<tbody class="tableBody" >
	
	<c:forEach items="${dataList}" var="o" varStatus="status">
	<tr class="odd" οnmοuseοver="this.className='highlight'" οnmοuseοut="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.price }</td>
		<td>${o.amount}</td>
		<td>
			<a href="${ctx}/cargo/extcproduct/toupdate.action?id=${o.id}">[修改] </a>
			<a href="${ctx}/cargo/extcproduct/delete.action?id=${o.id}">[删除]</a>
		</td>
	</tr>
	</c:forEach>
	
	</tbody>
</table>
</div>
 
</div>


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

同时别忘记将我们的修改页面update也更改一下
<select name="ctype">
<option value="">--请选择--</option>
<c:forEach items="${ctypeList}" var="cl">
<option value="${cl.orderNo}" <c:if test="${obj.ctype==cl.orderNo}">selected</c:if>>${cl.name }</option>
</c:forEach>
</select>

测试:



数据字典添加成功!

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值