Mybatis批量插入数据

1.xml文件

<insert id="addMrqDataBatch" >
        insert into c_b_mrq_info
        (
        proj_id,templ_rela_id,actual_value,design_value,is_qualified,
        rsr_id,index_num,templ_rela_det_id,create_time,
        create_user,img_name,index_group,proj_section_id,
        part_id,flag,household_no,wdd_id
        )
        values
        <foreach collection ="bMrqInfo2s" item="bMrqInfo2" index= "index" separator =",">
            (
            #{bMrqInfo2.projectID},
            #{bMrqInfo2.relationID},
            #{bMrqInfo2.measureValues},
            #{bMrqInfo2.designValues},
            #{bMrqInfo2.measureResult},
            #{bMrqInfo2.measurePlace},
            #{bMrqInfo2.measureIndex},
            #{bMrqInfo2.standardRelationID},
            now(),
            #{bMrqInfo2.takenBy},
            #{bMrqInfo2.measurePhoto},
            #{bMrqInfo2.indexGroup},
            #{bMrqInfo2.projSectionId},
            #{bMrqInfo2.partId},
            #{bMrqInfo2.flag},
            #{bMrqInfo2.householdNo},
            #{bMrqInfo2.dotId}
            )
        </foreach >

    </insert>

2.dao层

Integer addMrqDataBatch(@Param("bMrqInfo2s") List<BMrqInfo2> bMrqInfo2s);

3.实体类

public class BMrqInfo2 {

    private String projectID;

    private String relationID;

    private String measureValues;

    private String designValues;

    private String measureResult;

    private String measurePlace;

    private Integer measureIndex;

    private Integer standardRelationID;

    //private String createTime;

    private String takenBy;

    private String measurePhoto;

    private int indexGroup;

    private Integer projSectionId;

    private Integer partId;

    private    String flag;

    private String householdNo;

    private String dotId;

    public String getProjectID() {
        return projectID;
    }

    public void setProjectID(String projectID) {
        this.projectID = projectID;
    }

    public String getRelationID() {
        return relationID;
    }

    public void setRelationID(String relationID) {
        this.relationID = relationID;
    }

    public String getMeasureValues() {
        return measureValues;
    }

    public void setMeasureValues(String measureValues) {
        this.measureValues = measureValues;
    }

    public String getDesignValues() {
        return designValues;
    }

    public void setDesignValues(String designValues) {
        this.designValues = designValues;
    }

    public String getMeasureResult() {
        return measureResult;
    }

    public void setMeasureResult(String measureResult) {
        this.measureResult = measureResult;
    }

    public String getMeasurePlace() {
        return measurePlace;
    }

    public void setMeasurePlace(String measurePlace) {
        this.measurePlace = measurePlace;
    }

    public Integer getMeasureIndex() {
        return measureIndex;
    }

    public void setMeasureIndex(Integer measureIndex) {
        this.measureIndex = measureIndex;
    }

    public Integer getStandardRelationID() {
        return standardRelationID;
    }

    public void setStandardRelationID(Integer standardRelationID) {
        this.standardRelationID = standardRelationID;
    }

    public String getTakenBy() {
        return takenBy;
    }

    public void setTakenBy(String takenBy) {
        this.takenBy = takenBy;
    }

    public String getMeasurePhoto() {
        return measurePhoto;
    }

    public void setMeasurePhoto(String measurePhoto) {
        this.measurePhoto = measurePhoto;
    }

    public int getIndexGroup() {
        return indexGroup;
    }

    public void setIndexGroup(int indexGroup) {
        this.indexGroup = indexGroup;
    }

    public Integer getProjSectionId() {
        return projSectionId;
    }

    public void setProjSectionId(Integer projSectionId) {
        this.projSectionId = projSectionId;
    }

    public Integer getPartId() {
        return partId;
    }

    public void setPartId(Integer partId) {
        this.partId = partId;
    }

    public String getFlag() {
        return flag;
    }

    public void setFlag(String flag) {
        this.flag = flag;
    }

    public String getHouseholdNo() {
        return householdNo;
    }

    public void setHouseholdNo(String householdNo) {
        this.householdNo = householdNo;
    }

    public String getDotId() {
        return dotId;
    }

    public void setDotId(String dotId) {
        this.dotId = dotId;
    }
}

4.service层

public Integer addMrqDataBatch(List<BMrqInfo2> bMrqInfo2s){
        return bMrqAssessMapper.addMrqDataBatch(bMrqInfo2s);
    }
public Integer addMrqDataBatch(List<BMrqInfo2> bMrqInfo2s){
        return bMrqAssessMapper.addMrqDataBatch(bMrqInfo2s);
    }

    @Transactional
    public void  addMeasuredvalue(Map<String, Map<String,BMrqInfo2 >> map,String projId,String sectionId,String flag,String partId){
        //先遍历所有二级分类下的实测数据,即遍历groupId级别
        for (Map.Entry<String, Map<String,BMrqInfo2 >> entry1 : map.entrySet()) {
            //此处的map2就是item级别的实测数据
            Map<String, BMrqInfo2> map2 = entry1.getValue();
            //将item级别的实测数据只取value值,并生成一个准备插入实测表的list
            List<BMrqInfo2> result2 = new ArrayList<>(map2.values());
            //取一个具体的数据,获取projId,sectionId,flag和partId的值,用于后面调用存储过程来计算合格率
            BMrqInfo2 bMrqInfo2 = result2.get(0);
            projId=bMrqInfo2.getProjectID();
            sectionId=bMrqInfo2.getProjSectionId().toString();
            flag=bMrqInfo2.getFlag();
            partId=bMrqInfo2.getPartId().toString();
            //将上面生成的实测数据的所有templ_rela_id生成一个字符串集合,用于作为删除下面实测数据的条件
            List<String> acceptTypeList = result2.stream().map(BMrqInfo2 :: getRelationID).collect(Collectors.toList());
            //根据projId和上面的字符串集合 ,先把该项目下templ_rela_id的值在上面结果集的数测数据 删除
            bMrqAssessMapper.deleteMrqDataByAcceptType(projId,acceptTypeList,partId);
            //然后进行批量添加操作
            bMrqAssessMapper.addMrqDataBatch(result2);
        }

        Map<String, Object> mapCount = new HashMap<>();
        mapCount.put("projId", projId);
        mapCount.put("projSectionId", Integer.parseInt(sectionId));
        mapCount.put("flag", flag);
        mapCount.put("partId", Integer.parseInt(partId));
        try {
            //调用存储过程来计算合格率
            bMrqAssessMapper.countBMrqInfo2(mapCount);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

5.controller层

    @RequestMapping(value = "/addMeasuredvalue", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public synchronized Info addMeasuredvalue(@RequestBody Map<String, Map<String,BMrqInfo2 >> map, HttpServletRequest request) {
        //接口埋点
        InvokeInterface.addInvokeInterfaceData(request,ConstantList.actualMeasurement_code);
        logger.info("/shiceAction/addMeasuredvalue");
        String projId = null;
        String sectionId = null;
        String flag = null;
        String partId = null;
        Info infos = new Info();
        //指定数据库
        DBContextHolder.setDbType("dataSource2");
        bMrqAssessService.addMeasuredvalue(map,projId,sectionId,flag,partId);
        infos.setCode("1");
        infos.setMsg("数据上传成功");
        DBContextHolder.clearDbType();
        return infos;
    }
原文地址:https://www.cnblogs.com/lusaisai/p/13606251.html