通过上几次我们已经将购销合同的所有业务完成了,接下来我们要完成的是在购销合同下的货物的业务

我们的购销合同相对于货物是一对多的,所以我们需要配置对象之间的关联关系。

首先先编写实体类ContractProduct.java:

package cn.hpu.jk.domain;public class ContractProduct {private String id;//private Contract contract;//将复杂的关联变成单表操作private String contractId;//关联关系的表,都成为普通字段private String factoryId;private String factoryName;private String productNo;private String productImage;private String productDesc;//货物描述private Integer cnumber;//数量private Integer outNumber;//出货数量private String loadingRate;//装率private String boxNum;//箱数private String packingUnit;//包装单位private Double price;//单价private Double amount;//总价private Integer finished;//是否出货完毕private String exts;//附件private Integer orderNo;//排序号//get与set方法省略
}

我们将关系对象的形式变成了一张单表,变得简单了(比hibernate效率高),我们的关键是如何将他们关联起来而已。

我们然后来做一个映射,编写映射文件ContractProductMapper.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">
<mapper namespace="cn.hpu.jk.mapper.ContractProductMapper"><!-- 映射合同和合同下的货物信息一对多 --><resultMap type="cn.hpu.jk.domain.ContractProduct" id="ContractProductRM"><id property="id" column="CONTRACT_PRODUCT_ID"/><result property="contractId" column="CONTRACT_ID"/><result property="factoryId" column="FACTORY_ID"/><result property="factoryName" column="FACTORY_NAME"/><result property="productNo" column="PRODUCT_NO"/><result property="productImage" column="PRODUCT_IMAGE"/><result property="productDesc" column="PRODUCT_DESC"/><result property="cnumber" column="CNUMBER"/><result property="outNumber" column="OUT_NUMBER"/><result property="loadingRate" column="LOADING_RATE"/><result property="boxNum" column="BOX_NUM"/><result property="packingUnit" column="PACKING_UNIT"/><result property="price" column="PRICE"/><result property="amount" column="AMOUNT"/><result property="finished" column="FINISHED"/><result property="exts" column="EXTS"/><result property="orderNo" column="ORDER_NO"/></resultMap><!-- 查询 --><select id="find" parameterType="map" resultMap="ContractProductRM">select * from contract_product_cwhere 1=1</select><!-- 查询一个 --><select id="get" parameterType="String" resultMap="ContractProductRM">select * from contract_product_cwhere contract_product_id=#{id}</select><insert id="insert" parameterType="cn.hpu.jk.domain.ContractProduct">insert into contract_product_c(CONTRACT_PRODUCT_ID,CONTRACT_ID,FACTORY_ID,FACTORY_NAME,PRODUCT_NO,PRODUCT_IMAGE,PRODUCT_DESC,CNUMBER,OUT_NUMBER,LOADING_RATE,BOX_NUM,PACKING_UNIT,PRICE,AMOUNT,FINISHED,EXTS,ORDER_NO)values(#{id},#{contractId},#{factoryId},#{factoryName, jdbcType=VARCHAR},#{productNo, jdbcType=VARCHAR},#{productImage, jdbcType=VARCHAR},#{productDesc, jdbcType=VARCHAR},#{cnumber, jdbcType=INTEGER},#{outNumber, jdbcType=INTEGER},#{loadingRate, jdbcType=VARCHAR},#{boxNum, jdbcType=INTEGER},#{packingUnit, jdbcType=VARCHAR},#{price, jdbcType=DOUBLE},#{amount, jdbcType=DOUBLE},#{finished, jdbcType=INTEGER},#{exts, jdbcType=VARCHAR},#{orderNo, jdbcType=INTEGER})</insert><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><!-- 删除一条 --><delete id="deleteById" parameterType="string">delete from contract_product_cwhere contract_product_id=#{id}</delete><!-- 删除多条(一维字符串数组) --><delete id="delete" parameterType="string">delete from contract_product_cwhere contract_product_id in<foreach collection="array" item="id" open="(" close=")" separator=",">#{id}</foreach></delete>
</mapper>

之后我们写Dao层:
ContractProductDao.java:

package cn.hpu.jk.dao;import cn.hpu.jk.domain.Contract;public interface ContractProductDao extends BaseDao<ContractProduct>{//我们这里可以直接使用继承的BaseDao的增删改查方法//创建一系列其它Dao的原因是因为其它Dao有可能需要拓展}

ContractProductDaoImpl.java:

package cn.hpu.jk.dao.impl;import org.springframework.stereotype.Repository;import cn.hpu.jk.dao.ContractProductDao;
import cn.hpu.jk.domain.ContractProduct;@Repository //为了包扫描的时候这个Dao被扫描到
public class ContractProductDaoImpl extends BaseDaoImpl<ContractProduct> implements ContractProductDao{public ContractProductDaoImpl(){//设置命名空间super.setNs("cn.hpu.jk.mapper.ContractProductMapper");}}

然后是Service层
ContractProductService.java:

package cn.hpu.jk.service;import java.io.Serializable;
import java.util.List;
import java.util.Map;import cn.hpu.jk.domain.Contract;
import cn.hpu.jk.domain.ContractProduct;
import cn.hpu.jk.pagination.Page;public interface ContractProductService {public List<ContractProduct> findPage(Page page);   //分页查询public List<ContractProduct> find(Map paraMap);     //带条件查询,条件可以为null,既没有条件;返回list对象集合public ContractProduct get(Serializable id);             //只查询一个,常用于修改public void insert(ContractProduct contractProduct);        //插入,用实体作为参数public void update(ContractProduct contractProduct);     //修改,用实体作为参数public void deleteById(Serializable id); //按id删除,删除一条;支持整数型和字符串类型IDpublic void delete(Serializable[] ids); //批量删除;支持整数型和字符串类型ID
}

ContractProductServiceImpl.java:

package cn.hpu.jk.service.impl;import java.io.Serializable;
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.dao.ContractProductDao;
import cn.hpu.jk.domain.ContractProduct;
import cn.hpu.jk.pagination.Page;
import cn.hpu.jk.service.ContractProductService;@Service
public class ContractProductServiceImpl implements ContractProductService{@ResourceContractProductDao contractProductDao;@Overridepublic void delete(Serializable[] ids) {contractProductDao.delete(ids);}@Overridepublic void deleteById(Serializable id) {contractProductDao.deleteById(id);}@Overridepublic List<ContractProduct> find(Map paraMap) {return contractProductDao.find(paraMap);}@Overridepublic List<ContractProduct> findPage(Page page) {// TODO Auto-generated method stubreturn null;}@Overridepublic ContractProduct get(Serializable id) {return contractProductDao.get(id);}@Overridepublic void insert(ContractProduct contractProduct) {//设置UUIDcontractProduct.setId(UUID.randomUUID().toString());contractProductDao.insert(contractProduct);}@Overridepublic void update(ContractProduct contractProduct) {contractProductDao.update(contractProduct);}}

然后在beans-service.xml增加contractProductService的注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "><!-- 加载service-->   <bean name="factoryService" class="cn.hpu.jk.service.impl.FactoryServiceImpl"/><bean name="contractService" class="cn.hpu.jk.service.impl.ContractServiceImpl"/><bean name="contractProductService" class="cn.hpu.jk.service.impl.ContractProductServiceImpl"/></beans>

之后我们来编写Controller层,我们先写一个新增方法

package cn.hpu.jk.controller.cargo.contract;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import cn.hpu.jk.controller.BaseController;
import cn.hpu.jk.domain.ContractProduct;
import cn.hpu.jk.service.ContractProductService;@Controller
public class ContractProductController extends BaseController{@AutowiredContractProductService contractProductService; //转向新增页面@RequestMapping("/cargo/contractproduct/tocreate.action")public String tocreate(String contractId,Model model){//传递购销合同Idmodel.addAttribute("contractId", contractId);return "/cargo/contract/jContractProductCreate.jsp";//货物的新增页面}//新增@RequestMapping("/cargo/contractproduct/insert.action")public String insert(ContractProduct contractProduct,Model model){contractProductService.insert(contractProduct);model.addAttribu("contractId", contractProduct.getContractId());return "redirect:/cargo/contractproduct/tocreate.action";}
}

回顾一下我们的货物表

由于我们后面要对生产厂家(Factory)带条件查询,所以我们将生产厂家的Mapper配置文件的find方法修改一下:

<!-- 查询 -->
<select id="find" parameterType="map" resultMap="factoryRM">select * from factory_cwhere 1=1<if test="state != null"> and STATE=#{state}</if>
</select>

即保证了单独跳向生产厂家页面的时候取所有,又保证带state参数跳向生产厂家列表的时候按条件取数据。

同时我们还要在生产厂家的Service加一些处理代码

在FactoryService中添加

public List<Factory> getFactoryList(); //获取生产厂家列表

在FactoryServiceImpl中添加

@Override
public List<Factory> getFactoryList() {Map<String,Object> paraMap=new HashMap<String,Object>();paraMap.put("state", 1);//1启用,代表只查询启用的生产厂家return factoryDao.find(paraMap);
}

这里我们修改一下刚刚我们写的货物的Controller层(准备生产厂家的下拉列表)

package cn.hpu.jk.controller.cargo.contract;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import cn.hpu.jk.controller.BaseController;
import cn.hpu.jk.domain.ContractProduct;
import cn.hpu.jk.domain.Factory;
import cn.hpu.jk.service.ContractProductService;
import cn.hpu.jk.service.FactoryService;@Controller
public class ContractProductController extends BaseController{@AutowiredContractProductService contractProductService; @AutowiredFactoryService factoryService;//转向新增页面@RequestMapping("/cargo/contractproduct/tocreate.action")public String tocreate(String contractId,Model model){//传递购销合同Idmodel.addAttribute("contractId", contractId);//准备生产厂家的下拉列表List<Factory> factoryList=factoryService.getFactoryList();model.addAttribute("factoryList",factoryList);return "/cargo/contract/jContractProductCreate.jsp";//货物的新增页面}//新增@RequestMapping("/cargo/contractproduct/insert.action")public String insert(ContractProduct contractProduct,Model model){contractProductService.insert(contractProduct);model.addAttribu("contractId", contractProduct.getContractId());return "redirect:/cargo/contractproduct/tocreate.action";}
}

为了能看到新增的货物,我们在编辑页面添加货物的列表
因为我们是按照选择的生产厂家去看的货物列表,所以我们要修改我们的ContractProductMapper.xml中的find语句块:

 <!-- 查询某个合同下的货物信息 --><select id="find" parameterType="map" resultMap="ContractProductRM">select * from contract_product_cwhere 1=1<if test="contractId != null"> and contractId=#{CONTRACT_ID}</if></select>

我们在修改Controller来在转向货物编辑页面时带着相应合同的货物列表过去:

//转向新增页面
@RequestMapping("/cargo/contractproduct/tocreate.action")
public String tocreate(String contractId,Model model){//传递购销合同Idmodel.addAttribute("contractId", contractId);//准备生产厂家的下拉列表List<Factory> factoryList=factoryService.getFactoryList();model.addAttribute("factoryList",factoryList);//某个合同下的货物Map paraMap=new HashMap();paraMap.put("contractId", contractId);List<ContractProduct> dataList=contractProductService.find(paraMap);model.addAttribute("dataList", dataList);return "/cargo/contract/jContractProductCreate.jsp";//货物的新增页面
}

下面是最终的编辑新增页面jContractProductCreate.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="#" οnclick="formSubmit('insert.action','_self');">确定</a></li>
<li id="back"><a href="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="contractId" value="${contractId}"/><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></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="loadingRate" /></td></tr><tr><td class="columnTitle_mustbe">箱数:</td><td class="tableContent"><input type="text" name="boxNum" /></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></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><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.loadingRate }</td><td>${o.boxNum }</td><td>${o.price }</td><td>${o.amount}</td></tr></c:forEach></tbody>
</table>
</div></div></form>
</body>
</html>

新增货物搞定了,但是我们需要一个入口来新增货物。我们在购销合同的列表中新加一列“操作”选项,然后通过这一列可以添加货物。

<tr>
<td class="tableHeader">操作</td>
</tr>
<tr>
<td><a href="${ctx}/cargo/contractproduct/tocreate.action?contractId=${o.id}" title="新增货物信息">[货物]</a><td></tr>

效果:

之后我们为第一个购销合同添加两个货物:

我们添加成功之后在编辑框下可以看到相应的货物信息:

我们的“总金额”是计算出来的而不是填写出来的,所以我们要在必要的地方添加计算的代码。我们这里在ContractProductServiceImpl中的insert与update方法来计算总金额:

@Override
public void insert(ContractProduct contractProduct) {//设置UUIDcontractProduct.setId(UUID.randomUUID().toString());//自动计算总金额=数量*单价  ...修改,删除;同步合同金额if(UtilFuns.isNotEmpty(contractProduct.getCnumber())&&UtilFuns.isNotEmpty(contractProduct.getCnumber())){contractProduct.setAmount(contractProduct.getCnumber()*contractProduct.getPrice());}contractProductDao.insert(contractProduct);
}@Override
public void update(ContractProduct contractProduct) {//自动计算总金额=数量*单价  ...修改,删除;同步合同金额if(UtilFuns.isNotEmpty(contractProduct.getCnumber())&&UtilFuns.isNotEmpty(contractProduct.getCnumber())){contractProduct.setAmount(contractProduct.getCnumber()*contractProduct.getPrice());}contractProductDao.update(contractProduct);
}

其中,UtilFuns是我们在cn.hpu.jk.Util包下放入的工具类UtilFuns.java,它是关于所有(对象、字符串、列表)判断是否为空的类,其中isNotEmpty方法如下:

public static boolean isNotEmpty(String str){try{if(str==null || str.equals("null") || str.equals("")){return false;}return true;}catch(Exception e){return true;}}public static boolean isNotEmpty(Object obj){try{if(obj==null || obj.toString().equals("null") || obj.toString().equals("")){return false;}return true;}catch(Exception e){return true;}}

接下来我们测试,我们来填写一下货物信息
(解释一下“装率”:我们的货物是玻璃器皿,玻璃器皿不能直接放在集装箱里,我们需要先把玻璃器皿放入纸盒子里,一个纸盒子能装多少个玻璃杯,那多少个就成为装率。例如,客户定300个玻璃杯,装到一个盒子能容纳3个玻璃杯,需要100个盒子,那么装率就是1/3。“箱数”=数量/装率的分母=300/3=100,若是有不足3个的就加一个箱子)

可以看到,我们的总金额被计算出来了:

至此,我们完成了随购销合同的货物的主要业务功能

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

【springmvc+mybatis项目实战】杰信商贸-16.新增从表货物信息相关推荐

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

    首先我们先了解一下业务,什么是"货运管理"? "货运管理"是国际物流的概念,往常我们货物送到国内没有那么多事情,但是货物发往国外就多了很多手续,依靠小物流公司我 ...

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

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

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

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

  4. 毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)

    JavaEE:Spring+SpringMVC+Mybatis项目-企业权限管理系统 首先给出项目演示地址:http://www.youngxy.top:8080/SSM/ 项目架构图: 一:功能需求 ...

  5. (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结

    Android项目实战(二十七):数据交互(信息编辑)填写总结 前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先 ...

  6. 【超详细】SSM框架项目实战|Spring+Mybatis+Springmvc框架项目实战整合-【CRM客户管理系统】——课程笔记

    相关资料网盘链接: CRM客户管理系统资料 提取码 :0u04 P1--CRM阶段简介: web项目开发:如何分析,设计,编码,测试.        形成编程思想和编程习惯. P2--CRM的技术架构 ...

  7. 基于mysql的springmvcjar_糊涂jar_SpringMVC+Spring+Mybatis项目实战[SSM/MySQL/AJAX/IDEA]_Java视频-51CTO学院...

    鸟哥QQ交流群:833468344 我所有课程的学习主线为:java基础--->面向对象--->java高级部分(集合.多线程.正则表达式等)--->html5+css3---> ...

  8. Maven搭建SpringMVC+Mybatis项目详解【转】

    为什么80%的码农都做不了架构师?>>>    前言 最近比较闲,复习搭建一下项目,这次主要使用Spring+SpringMVC+Mybatis.项目持久层使用Mybatis3,控制 ...

  9. Spring+SpringMVC+Mybatis项目在线考试管理系统

    随着时代的发展,人们对考试的要求也越来越多,无论是在校学生,公务员考试还是驾校考试,考试参与的人数越来越多,如果还是延用传统的考试模式进行考试这无疑会给管理考试的工作人员增加很大的负担,同时给参与考试 ...

最新文章

  1. Linux命令screen—终端切换,工作环境保存,画面同步,防断网
  2. 谷歌相册也不能无限白嫖了,「地主家」也烧不起免费网盘
  3. 构建 RESTful Web 服务
  4. 计算机网络应用和计算机应用有什么区别,什么是计算机网络技术?和计算机应用技术区别...
  5. 直播 | ICLR 2021论文解读:兼听则明,信而有征:可信多模态分类
  6. SSIS 包部署错误 0xC0010014
  7. 传360以原彩虹QQ研发团队为班底拟强推IM
  8. React Native官方DEMO
  9. 蓝桥杯-算法提高-凶手 断案
  10. In-Stream Big Data Processing
  11. 如何使用mapinfo对地图分层设色并导出为图片
  12. 深入理解Linux网络技术内幕学习笔记第二章:一些重要的数据结构
  13. Redis 官方推出可视化工具,颜值爆表,功能真心强大!这是不给其他工具活路啊!...
  14. Appium安装、脚本录制执行
  15. img写盘工具安装Linux,USB Image Tool:Windows下的直接写盘利器 【开源硬件佳软介绍 #2】...
  16. 软件测试工程师的简历怎么写?
  17. 永恒之蓝(MS17010)漏洞kali使用MSF进行漏洞复现
  18. openCV生成一张纯白图片
  19. Request method ‘PUT‘ not supported
  20. uvalive 6657 GCD XOR

热门文章

  1. 为什么老外不愿意用 MyBatis?
  2. 为什么微服务一定要有网关?
  3. IntelliJ IDEA 2019从入门到癫狂 图文教程!
  4. 剑指offer_第11题_二进制中1的个数
  5. 内推 58 人拿到微软 offer!这位大佬有多强?
  6. IJCAI 2021 | 医学AI新坑:心电全景图及其生成网络
  7. 推荐一位在BAT大厂工作的技术+美女双料博主
  8. 一文搞定 GBDT、Xgboost 和 LightGBM 的面试
  9. 怎么快速插入 100 条数据,用时最短!
  10. Github中文项目排行榜,你永远想不到开发者都用它干了什么