【问题标题】:How to perform Batch Insert/Update operations using MyBatis/ iBatis Annotations in Spring MVC如何在 Spring MVC 中使用 MyBatis/iBatis Annotations 执行批量插入/更新操作
【发布时间】:2020-03-18 15:42:40
【问题描述】:

我第一次尝试执行批量插入/更新操作。我正在使用 Mybatis Anotaions (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

例如控制器类有:

@Autowired 
private RecordService recordservice;
.
.

recordservice.doBatchInsert(recordList);
.
.

return "success";

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

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

【问题讨论】:

  • 你不能为此使用 spring-batch 吗?更合适的是:spring.io/projects/spring-batch
  • 不,我不能。这将是现有项目结构的新附加组件。此外,仅对于一个单一的 perpose 使用,这将是不必要的过载。

标签: java spring mybatis ibatis spring-mybatis


【解决方案1】:

查看此常见问题解答以获取有关编码批量插入的建议:https://github.com/mybatis/mybatis-3/wiki/FAQ#how-do-i-code-a-batch-insert

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

【讨论】:

  • 我知道您所指的方法,但我不知道如何定义将“ExecutorType”作为“批处理”的“SqlSessionDaoSupport”构造函数。你能告诉我如何以下列方式将其设置为“批处理” 我应该将 添加到上述 bean 中吗?它是如何工作的?他们的文档在使用“SqlSessionDaoSupport”类时缺少这部分来定义“Batch”。
  • 您只需将 SqlSessionFactory 注入您的服务,然后您就可以使用常见问题解答中显示的代码。这里有一个完整的工作示例:github.com/jeffgbutler/PCFDemos/tree/master/mybatis-mysql
  • 它工作正常。现在,我可以执行批处理操作了。谢谢!!
猜你喜欢
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
相关资源
最近更新 更多