[Edit]
+
0
-
0
Spring Boot 2 - JdbcTemplate INSERT query example to MySQL database
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import java.sql.*; import java.util.List; @Controller public class UsersController { @Autowired private JdbcTemplate jdbcTemplate; // -------------------------------------------------------------------- // POST http://localhost:8080/api/user/create // echo '{"name":"john","email":"john@email.com"}' | curl -X POST -H "Content-Type: application/json" -d @- http://localhost:8080/api/user/create // @PostMapping( value = "/api/user/create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE ) @ResponseBody public UserEntity createUser(@RequestBody UserEntity userEntity) throws SQLException { long userId = this.insertUser(userEntity); return this.fetchUser(userId); } // -------------------------------------------------------------------- private long insertUser(UserEntity userEntity) throws SQLException { String query = "INSERT INTO `users`\n" + "\t(`name`, `email`)\n" + "VALUES\n" + "\t(?, ?)"; KeyHolder keyHolder = new GeneratedKeyHolder(); PreparedStatementCreator statementCreator = (Connection connection) -> { PreparedStatement preparedStatement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); preparedStatement.setString(1, userEntity.getName()); preparedStatement.setString(2, userEntity.getEmail()); return preparedStatement; }; int updatesCount = this.jdbcTemplate.update(statementCreator, keyHolder); if (updatesCount == 1) { Number generatedKey = keyHolder.getKey(); if (generatedKey == null) { throw new SQLException("Getting user id error."); } return generatedKey.longValue(); } throw new SQLException("Expected one row insert."); // should never happen } private UserEntity fetchUser(long userId) { String query = "SELECT `id`, `name`, `email`\n" + "FROM `users`\n" + "WHERE `id` = ?\n" + "LIMIT 1"; PreparedStatementCreator statementCreator = (Connection connection) -> { PreparedStatement preparedStatement = connection.prepareStatement(query); preparedStatement.setLong(1, userId); return preparedStatement; }; List<UserEntity> users = this.jdbcTemplate.query(statementCreator, new UserRowMapper()); if (users.isEmpty()) { return null; } return users.get(0); } // -------------------------------------------------------------------- private class UserRowMapper implements RowMapper<UserEntity> { @Override public UserEntity mapRow(ResultSet resultSet, int rowNumber) throws SQLException { UserEntity user = new UserEntity(); user.setId(resultSet.getLong("id")); user.setName(resultSet.getString("name")); user.setEmail(resultSet.getString("email")); return user; } } }