java - @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
如何在单次推送中插入所有记录?
解决方案
正如您从日志中看到的那样,它会打开事务并一次性完成。所以基本上你无论如何都实现了“单推”。不幸的是,您不能将多个插入合并为一个,除非您想自己使用直接 JDBC 查询或 *Dialect 扩展来完成。
推荐阅读
- r - 变量取新值时的 ID 测量
- c++ - 在二叉搜索树中查找最大和最小元素
- azure-devops - Azure DevOps - AzureBlob 文件复制任务在将文件复制到 blob 存储时失败
- design-patterns - 评级引擎的设计模式
- javascript - 在 React 组件的 JSON 对象中使用模板文字
- python - 无法使用python连接到蓝牙设备
- mysql - 如何索引 JSON ARRAY 存储在自己的列中
- powershell - 如何自动化用户输入可执行文件?
- julia - 如何在 Julia 中运行 n 秒的计算?
- javascript - Nebular Toastr > 无法读取 null 的属性“appendChild”