@SqlBatch прави множество вмъквания в jdbi sql обект API

public interface UserDBDao {
    @SqlBatch ("INSERT INTO user (id, name) VALUES (:user.id, :user.name)")
    void createAllUsers(@BindBean("user") List<User> users);
}

Когато се опитам да вмъкна няколко реда, използвайки горния метод, дори след като използвам @SqlBatch, той прави множество заявки за вмъкване. Sql регистрационният файл е както следва

2019-12-18T09:33:41.375486Z    22 Query SET autocommit=0
2019-12-18T09:33:41.376469Z    22 Query SELECT @@session.transaction_read_only
2019-12-18T09:33:41.376791Z    22 Query INSERT INTO user (id, name) VALUES (1000, 'a0')
2019-12-18T09:33:41.377059Z    22 Query INSERT INTO user (id, name) VALUES (1001, 'a1')
2019-12-18T09:33:41.377248Z    22 Query INSERT INTO user (id, name) VALUES (1002, 'a2')
2019-12-18T09:33:41.377427Z    22 Query INSERT INTO user (id, name) VALUES (1003, 'a3')
2019-12-18T09:33:41.377618Z    22 Query commit
2019-12-18T09:33:41.377903Z    22 Query SET autocommit=1

Как да вмъкна всички записи с едно натискане?


person Abhishek N    schedule 18.12.2019    source източник


Отговори (1)


Както можете да видите от дневника, той отваря транзакцията и я прави наведнъж. Така че по същество така или иначе постигате „единично натискане“. За съжаление не можете да обедините няколко вмъквания в едно, освен ако не искате да го направите сами с директни JDBC заявки или *Dialect разширение.

person Alexey    schedule 18.12.2019
comment
Здравей, @Alexey, благодаря за отговора. Има ли някаква разлика между извършването на 1. отваряне на транзакция и натискането й с помощта на множество изрази и 2. използване на един оператор за вмъкване по отношение на време и ресурси. - person Abhishek N; 18.12.2019
comment
Хей. Ако имате стабилна db връзка с нисък ping, разликата е почти никаква. Освен ако това не стане ваш виновник, не бих се насочил към оптимизация, тъй като ще отнеме повече усилия в сравнение с резултата, който ще получите. - person Alexey; 18.12.2019
comment
Така че с @SqlBatch моето приложение dropwizard ще отвори една връзка, ще натисне всички данни и ще я затвори правилно. Няма да отвори връзка за всяка вложка и да я затвори правилно. Прав ли съм? - person Abhishek N; 18.12.2019
comment
Да, това е вярно. Транзакциите живеят в рамките на една връзка, ако dropwizard затвори връзката след всяко извлечение, транзакцията ще бъде загубена. - person Alexey; 18.12.2019