mybatis foreach嵌套 批量insert map list数据

以Teacher和Students为例 ,

两者为一对多关系:

Teacher 实体类

private String tid;
    private String tName;
    private List studentList;

    public String getTid() {
        return tid;
    }

    public void setTid(String tid) {
        this.tid = tid;
    }

    public String gettName() {
        return tName;
    }

    public void settName(String tName) {
        this.tName = tName;
    }

    public List getStudentList() {
        return studentList;
    }

    public void setStudentList(List studentList) {
        this.studentList = studentList;
    }

 Student实体类

 private String sid;
    private String sName;

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getsName() {
        return sName;
    }

    public void setsName(String sName) {
        this.sName = sName;
    }

 应用场景 :在老师的service层批量插入老师数据  

 int nums=1000;
        //定义teacher list
        List teaList=new ArrayList();
        //数据是通过excel读取的 此处模拟循环读取excel row数据
        for(int rowi=0;rowi stuList=new ArrayList();
            Student student=new Student();
          //此处获取Students集合
          for(xxx){
              stuList.add(student);
          }
          //把student集合和teacher绑定
          teacher.setStudentList(stuList);

          //把teacher放入list
            teaList.add(teacher);
        }
        // 批量插入老师数据
        teacherMapper.batchInsertTeacher(teaList);
        //此时每个teacher对象都有返回的主键id值
        //老师主键 对应一个list(学生信息) map
        Map> stuMap=new HashMap<>();
        //填入数据  老师主键一对多学生信息
        for(Teacher tea:teaList){
            //非空判断 避免老师没有对应学生的情况(此处只进行逻辑处理 不考虑现实中老师没有学生)
            if(tea.getStudentList()!=null&&tea.getStudentList().size()>0){
                stuMap.put(tea.getTid(),tea.getStudentList());
            }
        }
        //调用学生service的批量保存学生方法
        studentService.batchInsertStudent(stuMap);

student  Mapper文件

int batchInsertStudent(@Param("stuMap") Map> stuMap);

student    mapper.xml文件

 
    INSERT INTO bs_student (sid,sName,tid) 
      values
    

     
          ((select REPLACE(UUID(),'-','') AS sid) ,#{list.sName},#{itemKey} )
     
    
 

至此 成功插入student数据。

你可能感兴趣的:(mybatis foreach嵌套 批量insert map list数据)