如何在 Spring MVC 中使用 MyBatis/ iBatis Annotations 执行批处理 Insert/Update 操作
How to perform Batch Insert/Update operations using MyBatis/ iBatis Annotations in Spring MVC
我第一次尝试执行批量插入/更新操作。我正在使用 Mybatis Annotaions (Mappers) 来执行数据库相关操作。
我有一个 @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
例如控制器 class 有:
@Autowired
private RecordService recordservice;
.
.
recordservice.doBatchInsert(recordList);
.
.
return "success";
此外,可以处理多少批量插入超过 approch 的记录? (记录范围从 5000 到 50000)
P.S. :- 这也是我第一次post在这里提问。如果我未能正确 post 问题,请对我宽容点!非常感谢!! :)
查看此常见问题解答以获得有关编码批量插入的建议:https://github.com/mybatis/mybatis-3/wiki/FAQ#how-do-i-code-a-batch-insert
您显示的不是批处理 - 它是一个巨大的插入语句。如果您真的有 5000 到 50000 条记录,那么您将很快达到 JDBC 准备语句允许的参数限制。如常见问题解答中所述,最好使用真正的 JDBC 批处理。
我第一次尝试执行批量插入/更新操作。我正在使用 Mybatis Annotaions (Mappers) 来执行数据库相关操作。
我有一个 @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
例如控制器 class 有:
@Autowired
private RecordService recordservice;
.
.
recordservice.doBatchInsert(recordList);
.
.
return "success";
此外,可以处理多少批量插入超过 approch 的记录? (记录范围从 5000 到 50000)
P.S. :- 这也是我第一次post在这里提问。如果我未能正确 post 问题,请对我宽容点!非常感谢!! :)
查看此常见问题解答以获得有关编码批量插入的建议:https://github.com/mybatis/mybatis-3/wiki/FAQ#how-do-i-code-a-batch-insert
您显示的不是批处理 - 它是一个巨大的插入语句。如果您真的有 5000 到 50000 条记录,那么您将很快达到 JDBC 准备语句允许的参数限制。如常见问题解答中所述,最好使用真正的 JDBC 批处理。