北京市网站建设公司排名,福州晋安区建设局网站,做网站是不是要拍法人的照片,网站推广和网站优化数据量大的时候如果在循环中执行单条新增操作#xff0c;是非常慢的。那么如何在mybatis中实现批量新增数据呢#xff1f;
方法
insert 标签的 foreach 属性可以用于批量插入数据。您可以使用 foreach 属性遍历一个集合#xff0c;并为集合中的每个元素生成一条插入语句。…数据量大的时候如果在循环中执行单条新增操作是非常慢的。那么如何在mybatis中实现批量新增数据呢
方法
insert 标签的 foreach 属性可以用于批量插入数据。您可以使用 foreach 属性遍历一个集合并为集合中的每个元素生成一条插入语句。
insert idinsertBatch parameterTypelistinsert into table_name (column1, column2)valuesforeach collectionlist itemitem separator,(#{item.column1}, #{item.column2})/foreach
/insert实战
表结构
我有一张表结构如下为了好理解我把结构做了适当的精简
create table exa_paper_question
(paper_id bigint not null comment 试卷编号,question_id bigint not null comment 试题编号
)comment 试卷和试题关联表;实体
public class ExaPaperQuestion
{private static final long serialVersionUID 1L;/** 试卷编号 */private Long paperId;/** 试题编号 */private Long questionId;// getter setter 略}maper.java /*** 批量新增试卷与试题的关系** param list 试卷和试题关联集合*/public int batchAddQuestionToPage(ListExaPaperQuestion list);mapper.xml !--批量新增试卷与试题的关系 --insert idbatchAddQuestionToPage parameterTypelistinsert into exa_paper_question (paper_id, question_id)valuesforeach collectionlist itemitem separator,(#{item.paperId}, #{item.questionId})/foreach/insert业务调用处示例 ListExaPaperQuestion list new ArrayList();
for(Long id:questionIds){ExaPaperQuestion pq new ExaPaperQuestion();pq.setPaperId(request.getPaperId());pq.setQuestionId(id);list.add(pq);}exaPaperQuestionMapper.batchAddQuestionToPage(list);批量删除
上面是演示的批量新增那就也能用到批量删除。
如果是有主键的表批量删除格式如下 delete iddeleteExaQuestionByQuestionIds parameterTypeStringdelete from exa_question where question_id inforeach itemquestionId collectionarray open( separator, close)#{questionId}/foreach/delete如果是我示例中的这张表是需要两个条件确实一条记录的那么就这样写 !--批量删除试卷与试题的关系 --insert idbatchDeleteExaPaperQuestionByPaperId parameterTypelistdelete from exa_paper_questionwhere (paper_id, question_id) in (foreach collectionlist itemitem separator,(#{item.paperId}, #{item.questionId})/foreach)/insert其他的代码参考批量新增几乎一致不在占用版面。
总结
稍作修改性能提升几十倍非常的爽