diff options
Diffstat (limited to 'src/main/java/com/juick/service/TagServiceImpl.java')
-rw-r--r-- | src/main/java/com/juick/service/TagServiceImpl.java | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/main/java/com/juick/service/TagServiceImpl.java b/src/main/java/com/juick/service/TagServiceImpl.java index 90d0fc83..9f5c9356 100644 --- a/src/main/java/com/juick/service/TagServiceImpl.java +++ b/src/main/java/com/juick/service/TagServiceImpl.java @@ -24,6 +24,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.springframework.jdbc.core.BatchPreparedStatementSetter; +import org.springframework.jdbc.core.PreparedStatementCallback; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.support.GeneratedKeyHolder; @@ -132,19 +133,16 @@ public class TagServiceImpl extends BaseJdbcService implements TagService { @Transactional @Override public int createTag(final String name) { - KeyHolder holder = new GeneratedKeyHolder(); - getJdbcTemplate().update( - con -> { - PreparedStatement stmt = con.prepareStatement( - "INSERT INTO tags(name) VALUES (?)", - Statement.RETURN_GENERATED_KEYS); + return getJdbcTemplate().execute(returningId("INSERT INTO tags(name)", "VALUES (?)", "tag_id"), + (PreparedStatementCallback<Integer>) stmt -> { stmt.setString(1, name); - return stmt; - }, - holder); - - return holder.getKeys().size() > 1 ? ((Number) holder.getKeys().get("tag_id")).intValue() - : holder.getKey().intValue(); + try (var resultSet = stmt.executeQuery()) { + if (resultSet.next()) { + return resultSet.getInt(1); + } + return 0; + } + }); } private class TagStatsMapper implements RowMapper<TagStats> { |