上一篇我们附件的增删改查功能全部完成。但是我们的附件有一个字段叫做“类型”(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:

  1. package cn.hpu.jk.domain;
  2. public class SysCode {
  3. private String id;
  4. private Integer orderNo;
  5. private String name;
  6. public String getId() {
  7. return id;
  8. }
  9. public void setId(String id) {
  10. this.id = id;
  11. }
  12. public Integer getOrderNo() {
  13. return orderNo;
  14. }
  15. public void setOrderNo(Integer orderNo) {
  16. this.orderNo = orderNo;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. }

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

  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. <mapper namespace="cn.hpu.jk.mapper.SysCodeMapper">
  6. <resultMap type="cn.hpu.jk.domain.SysCode" id="sysCodeRM">
  7. <id property="id" column="SYS_CODE_ID"/>
  8. <id property="orderNo" column="ORDER_NO"/>
  9. <id property="name" column="NAME"/>
  10. </resultMap>
  11. <!-- 查询某个分类下的内容 -->
  12. <select id="find" parameterType="map" resultMap="sysCodeRM">
  13. select sys_code_id,order_no,name from sys_code_b
  14. where 1=1
  15. <if test="parentId != null"> and PARENT_ID=#{parentId}</if>
  16. </select>
  17. </mapper>

我们在给它写一个Dao层
SysCodeDao.java

  1. package cn.hpu.jk.dao;
  2. import cn.hpu.jk.domain.SysCode;
  3. public interface SysCodeDao extends BaseDao<SysCode>{
  4. }

SysCodeDaoImpl.java:

  1. package cn.hpu.jk.dao.impl;
  2. import org.springframework.stereotype.Repository;
  3. import cn.hpu.jk.dao.SysCodeDao;
  4. import cn.hpu.jk.domain.SysCode;
  5. @Repository //为了包扫描的时候这个Dao被扫描到
  6. public class SysCodeDaoImpl extends BaseDaoImpl<SysCode> implements SysCodeDao{
  7. public SysCodeDaoImpl(){
  8. //设置命名空间
  9. super.setNs("cn.hpu.jk.mapper.SysCodeMapper");
  10. }
  11. }

接下来是Service层:
SysCodeService.java:

  1. package cn.hpu.jk.service;
  2. import java.util.List;
  3. import java.util.Map;
  4. import cn.hpu.jk.domain.SysCode;
  5. public interface SysCodeService {
  6. public List<SysCode> find(Map paraMap);   //查询
  7. }

SysCodeServiceImpl.java:

  1. package cn.hpu.jk.service.impl;
  2. import java.util.List;
  3. import java.util.Map;
  4. import javax.annotation.Resource;
  5. import cn.hpu.jk.dao.SysCodeDao;
  6. import cn.hpu.jk.domain.SysCode;
  7. import cn.hpu.jk.service.SysCodeService;
  8. public class SysCodeServiceImpl implements SysCodeService{
  9. @Resource
  10. SysCodeDao sysCodeDao;
  11. @Override
  12. public List<SysCode> find(Map paraMap) {
  13. return sysCodeDao.find(paraMap);
  14. }
  15. }

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

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

  1. package cn.hpu.jk.service;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import java.util.Map;
  5. import cn.hpu.jk.domain.ExtCproduct;
  6. import cn.hpu.jk.domain.SysCode;
  7. import cn.hpu.jk.pagination.Page;
  8. public interface ExtCproductService {
  9. public List<ExtCproduct> findPage(Page page); //分页查询
  10. public List<ExtCproduct> find(Map paraMap);       //带条件查询,条件可以为null,既没有条件;返回list对象集合
  11. public ExtCproduct get(Serializable id);                //只查询一个,常用于修改
  12. public void insert(ExtCproduct extCproduct);        //插入,用实体作为参数
  13. public void update(ExtCproduct extCproduct);        //修改,用实体作为参数
  14. public void deleteById(Serializable id);    //按id删除,删除一条;支持整数型和字符串类型ID
  15. public void delete(Serializable[] ids); //批量删除;支持整数型和字符串类型ID
  16. public List<SysCode> getCtypeList(); //获取分类列表
  17. }

然后在附件的Service实现方法中来实现getCtypeList()方法:

  1. package cn.hpu.jk.service.impl;
  2. import java.io.Serializable;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.UUID;
  7. import javax.annotation.Resource;
  8. import org.springframework.stereotype.Service;
  9. import cn.hpu.jk.Util.UtilFuns;
  10. import cn.hpu.jk.dao.ExtCproductDao;
  11. import cn.hpu.jk.dao.SysCodeDao;
  12. import cn.hpu.jk.domain.ExtCproduct;
  13. import cn.hpu.jk.domain.SysCode;
  14. import cn.hpu.jk.pagination.Page;
  15. import cn.hpu.jk.service.ExtCproductService;
  16. @Service
  17. public class ExtCproductServiceImpl implements ExtCproductService{
  18. @Resource
  19. ExtCproductDao extCproductDao;
  20. @Resource
  21. SysCodeDao sysCodeDao;
  22. //中间其它代码省略......
  23. @Override
  24. public List<SysCode> getCtypeList() {
  25. Map paraMap=new HashMap();
  26. paraMap.put("parentId", "0104");//0104是附件表的分类
  27. return sysCodeDao.find(paraMap);
  28. }
  29. }

分类获取工作做完,我们在附件的Controller的新增和修改方法中获取分类列表,用于在jsp界面的分类下拉菜单中填充分类值:

  1. //转向新增页面
  2. @RequestMapping("/cargo/extcproduct/tocreate.action")
  3. public String tocreate(String contractProductId,Model model){
  4. //传递购销合同Id
  5. model.addAttribute("contractProductId", contractProductId);
  6. //准备生产厂家的下拉列表
  7. List<Factory> factoryList=factoryService.getFactoryList();
  8. model.addAttribute("factoryList",factoryList);
  9. //某个货物下的附件
  10. Map<String,String> paraMap=new HashMap<String,String>();
  11. paraMap.put("contractProductId", contractProductId);
  12. List<ExtCproduct> dataList=extCproductService.find(paraMap);
  13. model.addAttribute("dataList", dataList);
  14. //准备分类下拉列表
  15. List<SysCode> ctypeList=extCproductService.getCtypeList();
  16. model.addAttribute("ctypeList", ctypeList);
  17. return "/cargo/contract/jExtCproductCreate.jsp";//货物的新增页面
  18. }
  19. //转向修改页面
  20. @RequestMapping("/cargo/extcproduct/toupdate.action")
  21. public String toupdate(String id,Model model){
  22. ExtCproduct obj=extCproductService.get(id);
  23. model.addAttribute("obj", obj);
  24. //准备生产厂家的下拉列表
  25. List<Factory> factoryList=factoryService.getFactoryList();
  26. model.addAttribute("factoryList",factoryList);
  27. //准备分类下拉列表
  28. List<SysCode> ctypeList=extCproductService.getCtypeList();
  29. model.addAttribute("ctypeList", ctypeList);
  30. return "/cargo/contract/jExtCproductUpdate.jsp";//货物的修改页面
  31. }

然后我们把编辑附件的jsp界面中之前的分类input款改为下拉select框,然后利用C标签的遍历将分类值分布至select框的每个option选项中:
(下面代码更改的部分是ctype部分)

  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('insert.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. <div class="textbox" id="centerTextbox">
  30. <div class="textbox-header">
  31. <div class="textbox-inner-header">
  32. <div class="textbox-title">
  33. 添加附件信息
  34. </div>
  35. </div>
  36. </div>
  37. <div>
  38. <div>
  39. <table class="commonTable" cellspacing="1">
  40. <input type="hidden" name="contractProductId" value="${contractProductId}"/>
  41. <tr>
  42. <td class="columnTitle_mustbe">厂家名称:</td>
  43. <td class="tableContent">
  44. <select name="factoryId" onchange="setFactoryName(this.options[this.selectedIndex].text);">
  45. <option value="">--请选择--</option>
  46. <c:forEach items="${factoryList}" var="f">
  47. <option value="${f.id}">${f.factoryName }</option>
  48. </c:forEach>
  49. <input type="hidden" id="factoryName" name="factoryName" value=""/>
  50. </select>
  51. </td>
  52. <td class="columnTitle_mustbe">货号:</td>
  53. <td class="tableContent"><input type="text" name="productNo" /></td>
  54. </tr>
  55. <tr>
  56. <td class="columnTitle_mustbe">货物照片:</td>
  57. <td class="tableContent"><input type="text" name="productImage" /></td>
  58. <td class="columnTitle_mustbe">分类</td>
  59. <td class="tableContent">
  60. <select name="ctype">
  61. <option value="">--请选择--</option>
  62. <c:forEach items="${ctypeList}" var="cl">
  63. <option value="${cl.orderNo}">${cl.name }</option>
  64. </c:forEach>
  65. </select>
  66. </td>
  67. </tr>
  68. <tr>
  69. <td class="columnTitle_mustbe">数量</td>
  70. <td class="tableContent"><input type="text" name="cnumber" /></td>
  71. <td class="columnTitle_mustbe">单价:</td>
  72. <td class="tableContent"><input type="text" name="price" /></td>
  73. </tr>
  74. <tr>
  75. <td class="columnTitle_mustbe">包装单位:</td>
  76. <td class="tableContent"><input type="text" name="packingUnit" /></td>
  77. <td class="columnTitle_mustbe">排序号:</td>
  78. <td class="tableContent"><input type="text" name="orderNo" /></td>
  79. </tr>
  80. <tr>
  81. <td class="columnTitle_mustbe">货物描述:</td>
  82. <td class="tableContent"><textarea  name="productDesc" style="height:200px;width: 400px"></textarea></td>
  83. <td class="columnTitle_mustbe">要求:</td>
  84. <td class="tableContent"><textarea  name="productRequest" style="height:200px;width: 400px"></textarea></td>
  85. </tr>
  86. </table>
  87. </div>
  88. </div>
  89. <div class="textbox" id="centerTextbox">
  90. <div class="textbox-header">
  91. <div class="textbox-inner-header">
  92. <div class="textbox-title">
  93. 附件列表
  94. </div>
  95. </div>
  96. </div>
  97. <div>
  98. <div class="eXtremeTable" >
  99. <table id="ec_table" class="tableRegion" width="98%" >
  100. <thead>
  101. <tr>
  102. <td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>
  103. <td class="tableHeader">序号</td>
  104. <td class="tableHeader">厂家名称</td>
  105. <td class="tableHeader">货号</td>
  106. <td class="tableHeader">数量</td>
  107. <td class="tableHeader">包装单位</td>
  108. <td class="tableHeader">单价</td>
  109. <td class="tableHeader">总金额</td>
  110. <td class="tableHeader">操作</td>
  111. </tr>
  112. </thead>
  113. <tbody class="tableBody" >
  114. <c:forEach items="${dataList}" var="o" varStatus="status">
  115. <tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >
  116. <td><input type="checkbox" name="id" value="${o.id}"/></td>
  117. <td>${status.index+1}</td>
  118. <td>${o.factoryName}</td>
  119. <td>${o.productNo}</td>
  120. <td>${o.cnumber}</td>
  121. <td>${o.packingUnit}</td>
  122. <td>${o.price }</td>
  123. <td>${o.amount}</td>
  124. <td>
  125. <a href="${ctx}/cargo/extcproduct/toupdate.action?id=${o.id}">[修改] </a>
  126. <a href="${ctx}/cargo/extcproduct/delete.action?id=${o.id}">[删除]</a>
  127. </td>
  128. </tr>
  129. </c:forEach>
  130. </tbody>
  131. </table>
  132. </div>
  133. </div>
  134. </form>
  135. </body>
  136. </html>

同时别忘记将我们的修改页面update也更改一下

  1. <select name="ctype">
  2. <option value="">--请选择--</option>
  3. <c:forEach items="${ctypeList}" var="cl">
  4. <option value="${cl.orderNo}" <c:if test="${obj.ctype==cl.orderNo}">selected</c:if>>${cl.name }</option>
  5. </c:forEach>
  6. </select>

测试:

数据字典添加成功!

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

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

    1.项目背景杰信项目物流行业的项目,杰信商贸是国际物流行业一家专门从事进出口玻璃器皿贸易的公司.公司总部位于十一个朝代的帝王之都西安,业务遍及欧美.随着公司不断发展壮大,旧的信息系统已无法满足公司的快 ...

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

    1.重点知识回顾 Maven1)覆盖仓库文件,实际企业开发,公司会架一个测试服务器,在测试服务器中架私服.我们开发人员的程序,都连接私服.当本地没有项目中要使用的jar,Myeclipse maven ...

  3. 【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

    上一篇我们创建了工程和一个Factory的po对象(javaBean),我们也写好了Mapper的映射文件,接下来我们来完成生产厂家的DAO与SERVICE,以及CONTROLLER,还有做显示的JS ...

  4. 【springmvc+mybatis项目实战】杰信商贸-7.生产厂家新增

    我们要实现新的功能,就是生产厂家的新增先来回顾一下系统架构图我们数据库这边已经建好表了,接下来要做的就是mapper映射 编辑FactoryMapper.xml文件,加入“添加”的逻辑配置代码块 &l ...

  5. 【springmvc+mybatis项目实战】杰信商贸-2.数据库配置

    首先我们来了解项目的架构 我们分别使用了MySql和Oracle数据库,即是异构数据库.我们做到一个平台支持多个数据库.数据库建模我们使用Sybase公司的PowerDesigner(以后简称PD), ...

  6. 【springmvc+mybatis项目实战】杰信商贸-3.需求分析与数据库建模

    开发步骤需求:生产厂家信息维护基础表FACTORY_C 1.业务需求:a)<需求说明书>     1)描述业务功能     生产厂家模块     功能:为在购销合同模块中的货物信息和附件信 ...

  7. IDEA中maven搭建Spring+SpringMVC+mybatis项目

    一.介绍 使用IDEA搭建maven web项目,整合框架Spring+SpringMVC+mybatis 项目结构图:

  8. 通过IntelliJ IDEA创建maven+springmvc+mybatis项目

    第一个springmvc+mybatis项目,通过学习极客学院视频(视频案例通过eclipse搭建,网址为http://www.jikexueyuan.com/course/1430.html),发现 ...

  9. springBoot 整合 mybatis 项目实战

    二.springBoot 整合 mybatis 项目实战   前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...

随机推荐

  1. Android杀死进程方法

    1. android.os.Process.killProcess(pid) 只能终止本程序的进程,无法终止其它的 具体代码如下: ?12 Process.killProcess(Process.my ...

  2. Unity 游戏框架搭建 (十八) 静态扩展 + 泛型实现transform的链式编程

    本篇文章介绍如何实现如下代码的链式编程: C# this.Position(Vector3.one) .LocalScale(1.0f) .Rotation(Quaternion.identity); ...

  3. App 运行后屏幕顶部和底部各留黑边问题 - iOS

    App 启动后屏幕的顶部和底部各产生一条黑边,App 的内容会被压缩在两个黑条内显示,比例失调的情况. 初步判断是启动页资源图片适配问题. 首先,查看工程 project => General ...

  4. 【模板】缩点(tarjan,DAG上DP)

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

  5. OS--lab0+lab1+lab4+lab5+lab6+lab7

    URL:https://github.com/Chasssser/MytestOR(Linux) git clone https://github.com/Chasssser/Mytest

  6. QT 防止FTP 上传软件在断连处 Crash

    前段时间发现项目中的上传FTP软件有可能会在从服务器申请断连时Crash, 所以加了一个Timer. 由于项目代码行数过大, 此处上传部分代码片段. timeoutTimer = new QTimer ...

  7. parsing XML document from class path resource [applicationtext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationtext.xml] cannot be opened because it does not e

    控制台异常: parsing XML document from class path resource [applicationtext.xml]; nested exception is java ...

  8. 利用ascii码生成26个英文字母

    <script> let a = ""; for (var i = 65; i < 91; i++) { a += String.fromCharCode(i); ...

  9. ArrayList的源码分析(基于jdk1.8)

    1.初始化 transient Object[] elementData; //实际存储元素的数组 private static final Object[] DEFAULTCAPACITY_EMPT ...

  10. 浅谈ETL架构中ODS的作用以及如何在HaoheDI中自动创建ODS表

    什么是ODS表? 在ETL架构中,源数据很少会直接抽取加载到数据仓库EDW,二者之间往往会设置一个源数据的临时存储区域,存储数据在清洗转换前的原始形态,通常被大家称做操作型数据存储,简称ODS,在Ki ...