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


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

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


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


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

    [java] view plain copy
     
    1. package cn.hpu.jk.dao;  
    2.   
    3. import cn.hpu.jk.domain.SysCode;  
    4.   
    5. public interface SysCodeDao extends BaseDao<SysCode>{  
    6.       
    7. }  


    SysCodeDaoImpl.java:

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


    接下来是Service层:
    SysCodeService.java:

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


    SysCodeServiceImpl.java:

    [java] view plain copy
     
    1. package cn.hpu.jk.service.impl;  
    2.   
    3. import java.util.List;  
    4. import java.util.Map;  
    5.   
    6. import javax.annotation.Resource;  
    7.   
    8. import cn.hpu.jk.dao.SysCodeDao;  
    9. import cn.hpu.jk.domain.SysCode;  
    10. import cn.hpu.jk.service.SysCodeService;  
    11.   
    12.   
    13. public class SysCodeServiceImpl implements SysCodeService{  
    14.   
    15.   
    16.     @Resource  
    17.     SysCodeDao sysCodeDao;  
    18.   
    19.   
    20.     @Override  
    21.     public List<SysCode> find(Map paraMap) {  
    22.         return sysCodeDao.find(paraMap);  
    23.     }  
    24. }  


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

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

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


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

    [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. import java.util.UUID;  
    8.   
    9. import javax.annotation.Resource;  
    10.   
    11. import org.springframework.stereotype.Service;  
    12.   
    13. import cn.hpu.jk.Util.UtilFuns;  
    14. import cn.hpu.jk.dao.ExtCproductDao;  
    15. import cn.hpu.jk.dao.SysCodeDao;  
    16. import cn.hpu.jk.domain.ExtCproduct;  
    17. import cn.hpu.jk.domain.SysCode;  
    18. import cn.hpu.jk.pagination.Page;  
    19. import cn.hpu.jk.service.ExtCproductService;  
    20.   
    21.   
    22. @Service  
    23. public class ExtCproductServiceImpl implements ExtCproductService{  
    24.       
    25.     @Resource  
    26.     ExtCproductDao extCproductDao;  
    27.     @Resource  
    28.     SysCodeDao sysCodeDao;  
    29.       
    30.     //中间其它代码省略......      
    31.   
    32.   
    33.     @Override  
    34.     public List<SysCode> getCtypeList() {  
    35.         Map paraMap=new HashMap();  
    36.         paraMap.put("parentId", "0104");//0104是附件表的分类  
    37.         return sysCodeDao.find(paraMap);  
    38.     }  
    39.   
    40.   
    41. }  


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

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


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

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


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

    [html] view plain copy
     
    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>  


    测试:



    数据字典添加成功!

  • 相关阅读:
    .NET Worker Service 如何优雅退出
    .NET 中的 Worker Service 入门介绍
    一图看懂 ASP.NET Core 中的服务生命周期
    创建支持依赖注入、Serilog 日志和 AppSettings 的 .NET 5 控制台应用
    Asp.Net Core 5 REST API 使用 RefreshToken 刷新 JWT
    Asp.Net Core 5 REST API 使用 JWT 身份验证
    Asp.Net Core 5 REST API
    JWT 介绍
    在 .NET Core 5 中集成 Create React app
    在 .NET Core 中构建 REST API
  • 原文地址:https://www.cnblogs.com/yxllovetm/p/8807485.html
Copyright © 2020-2023  润新知