ssm框架,往数据库插入数据的时候太慢了,能不能一次性插入一个数组而不是这样的foreach循环?

ServiceArea sa = new ServiceArea();
        sa.setQuestionnaire_id(questionnaire.getId());
        sa.setStatus(0);
        for (String s : questionnaire.getService_area()) {
            sa.setId(SysUtil.getUUID());
            sa.setarea_id(s);
            serviceAreaService.insertServiceArea(sa);    
        }

<mapper namespace="com.mapper.ServiceAreaMapper">
    
     <insert id="insertServiceArea" >
           insert into service_area(id,area_id,questionnaire_id,status) 
               values(#{id},#{area_id},#{questionnaire_id},#{status})
   </insert>
    
</mapper>
阅读 4.1k
3 个回答

MyBatis Batch Insert

<insert id="insertServiceArea">
    insert into service_area(id,area_id,questionnaire_id,status) values
    <foreach collection="array" item="item" separator=","> 
        (#{item.id},#{item.area_id},#{item.questionnaire_id},#{item.status})
    </foreach>
</insert>

肯定可以直接插入list啊

  <select id="insertList" parameterType="hashmap" statementType="STATEMENT">
        INSERT INTO
        ${tableName}(name, note, phone_num,telPhone_num,company)
        VALUES
        <foreach collection="phoneInfoList" item="item" index="index" separator=",">
            (${item.name,jdbcType=VARCHAR}, ${item.note,jdbcType=VARCHAR},
            ${item.phoneNum,jdbcType=VARCHAR},${item.telPhoneNum,jdbcType=VARCHAR},${item.company,jdbcType=VARCHAR})
        </foreach>
    </select>
<insert id="insertBatch" parameterType="java.util.List">
    insert into test_table (id,state) values
      <foreach collection="list" item="item" index="index" separator="," >  
        (#{item.id,jdbcType=INTEGER}, #{item.state,jdbcType=INTEGER}})  
     </foreach>  
  </insert>

这样就能批量插入而不需要在代码里面实现foreach了呀

推荐问题