如何使用Spring NamedParameterJdbcTemplate为多个表插入批处理?

时间:2016-06-01 11:46:21

标签: java spring

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

1 个答案:

答案 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 次插入,依此类推。