public int insertUser(User user) {
String query = "insert into named_demo.user_details (f_name, l_name, email, password) values(:f_name, :l_name, :email, :password);
+
"insert into named_demo.media (user_id, media_type, media_url) values ((SELECT LAST_INSERT_ID()), :media_type, :media_url);";
Map<String, Object> namedParameters = new HashMap<>();
namedParameters.put("f_name", user.getFname());
namedParameters.put("l_name", user.getLname());
namedParameters.put("email", user.getEmailId());
namedParameters.put("password", user.getPassword());
namedParameters.put("media_type", 1);
namedParameters.put("media_url", user.getMediaUrl());
int[] value = jtemplate.batchUpdate(query, namedParameters);
}
这里我尝试在Spring NamedParameterJdbcTemplate中使用批处理,并在多个表中插入数据。
。我尝试在用户详细信息表中插入数据,我希望使用((SELECT LAST_INSERT_ID())获取表主ID并插入媒体表。
可以通过NamedParameterJdbcTemplate实现,也可以使用其他方法。如果有人试过,请告诉我。
Tnank you
答案 0 :(得分:0)
在 postgresql 中使用 CTE 查询可以一次插入两个表:
with first_insert as (
insert into address (address_description, address_type)
values ('test', 0)
returning id)
insert
into address_geometry(id, geom_text)
select id,'test2'
from first_insert;
您可以将此查询包装到另一个 CTE 中以进行 3 次插入,依此类推。