如何在Spring MVC中使用MyBatis / iBatis批注执行批量插入/更新操作

问题描述 投票:0回答:1

我正在尝试第一次执行批量插入/更新操作。我正在使用Mybatis注释(映射器)来执行与数据库相关的操作。

我有一个@Param,它是List<Map<String, String>> recordList,看起来像:

[{record_no=1, first_name="Alpha", last_name="Tester", age=23, gender="female"},
 {record_no=2, first_name="Beta", last_name="Tester", age=21, gender="male"}]

映射器将有:

@Insert({"<script>", 
    "insert into  demo_record (first_name, last_name, age, gender, record_no) values ",
    "<foreach collection='recordList' item='record' index='index' open='(' separator = '),
     ( close=')' > <Here I do not know how to pass/ access Map's values.
                   Would it be just #{first_name} or something else?>
    </foreach>",
    "</script>"})
void doBatchInsert(@Param("recordList") List<Map<String, String>> recordList);

****我不确定open='(' separator = '), ( close=')'到底是做什么的。如果有人可以阐明它,我将不胜感激。 ****

我关注@Repository-> @Service,然后关注@Autowire RecordService.java

例如,控制器类具有:

@Autowired 
private RecordService recordservice;
.
.

recordservice.doBatchInsert(recordList);
.
.

return "success";

此外,在批准之上可以批量插入多少记录? (记录范围从5000到50000)

P.S。:-这也是我第一次在这里发布问题。如果我未能正确发布问题,请对我放松!非常感谢!! :)

java spring mybatis ibatis spring-mybatis
1个回答
1
投票

请参阅此常见问题,以获取有关对批处理插入代码进行编码的建议:https://github.com/mybatis/mybatis-3/wiki/FAQ#how-do-i-code-a-batch-insert

您显示的不是批处理-这是一个巨大的插入语句。如果确实有5000到50000条记录,那么您将很快达到JDBC准备语句允许的参数限制。如常见问题所述,最好使用真正的JDBC批处理。

© www.soinside.com 2019 - 2024. All rights reserved.