Как выполнить операции пакетной вставки / обновления с использованием аннотаций MyBatis / iBatis в Spring MVC - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь выполнить массовую операцию вставки / обновления в первый раз. Я использую 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"}]

Mapper будет иметь:

@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)

PS : - Я также впервые публикую здесь вопрос. Пожалуйста go спокойно, если мне не удалось правильно задать вопрос! Большое спасибо!! :)

1 Ответ

1 голос
/ 19 марта 2020

Посмотрите этот FAQ для получения рекомендаций по кодированию пакетных вставок: https://github.com/mybatis/mybatis-3/wiki/FAQ#how -do-i-code-a-batch-insert

То, что вы показываете, не является партия - это одно гигантское утверждение вставки. Если у вас действительно будет от 5000 до 50000 записей, то вы очень быстро достигнете предела параметров, разрешенных для подготовленного оператора JDB C. Было бы лучше использовать настоящую партию JDB C, как описано в FAQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...