diff --git a/spring-5/src/main/java/com/baeldung/jdbc/autogenkey/repository/MessageRepositoryJDBCTemplate.java b/spring-5/src/main/java/com/baeldung/jdbc/autogenkey/repository/MessageRepositoryJDBCTemplate.java new file mode 100644 index 0000000000..cf0dbe4681 --- /dev/null +++ b/spring-5/src/main/java/com/baeldung/jdbc/autogenkey/repository/MessageRepositoryJDBCTemplate.java @@ -0,0 +1,38 @@ +package com.baeldung.jdbc.autogenkey.repository; + +import java.sql.PreparedStatement; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.support.GeneratedKeyHolder; +import org.springframework.jdbc.support.KeyHolder; +import org.springframework.stereotype.Repository; + +@Repository +public class MessageRepositoryJDBCTemplate { + + @Autowired + JdbcTemplate jdbcTemplate; + + final String INSERT_MESSAGE_SQL = "insert into sys_message (message) values(?) "; + + public long insert(final String message) { + + KeyHolder keyHolder = new GeneratedKeyHolder(); + + jdbcTemplate.update(connection -> { + PreparedStatement ps = connection.prepareStatement(INSERT_MESSAGE_SQL); + ps.setString(1, message); + return ps; + }, keyHolder); + + return (long) keyHolder.getKey(); + } + + final String SELECT_BY_ID = "select message from sys_message where id = ?"; + + public String getMessageById(long id) { + return this.jdbcTemplate.queryForObject(SELECT_BY_ID, String.class, new Object[] { id }); + } + +} diff --git a/spring-5/src/main/java/com/baeldung/jdbc/autogenkey/repository/MessageRepositorySimpleJDBCInsert.java b/spring-5/src/main/java/com/baeldung/jdbc/autogenkey/repository/MessageRepositorySimpleJDBCInsert.java new file mode 100644 index 0000000000..022ea29ed6 --- /dev/null +++ b/spring-5/src/main/java/com/baeldung/jdbc/autogenkey/repository/MessageRepositorySimpleJDBCInsert.java @@ -0,0 +1,29 @@ +package com.baeldung.jdbc.autogenkey.repository; + +import java.util.HashMap; +import java.util.Map; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.simple.SimpleJdbcInsert; +import org.springframework.stereotype.Repository; + +@Repository +public class MessageRepositorySimpleJDBCInsert { + + SimpleJdbcInsert messageInsert; + + @Autowired + public MessageRepositorySimpleJDBCInsert(DataSource dataSource) { + messageInsert = new SimpleJdbcInsert(dataSource).withTableName("sys_message").usingGeneratedKeyColumns("id"); + } + + public long insert(String message) { + Map parameters = new HashMap(1); + parameters.put("message", message); + Number newId = messageInsert.executeAndReturnKey(parameters); + return (long) newId; + } + +} diff --git a/spring-5/src/main/resources/autogenkey-db.properties b/spring-5/src/main/resources/autogenkey-db.properties new file mode 100644 index 0000000000..3e1a088dc1 --- /dev/null +++ b/spring-5/src/main/resources/autogenkey-db.properties @@ -0,0 +1,9 @@ +spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE +spring.datasource.username=sa +spring.datasource.password= +spring.datasource.driverClassName=org.h2.Driver +spring.jpa.hibernate.ddl-auto=create +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect + +spring.datasource.initialize=true +spring.datasource.schema=classpath:autogenkey-schema.sql diff --git a/spring-5/src/main/resources/autogenkey-schema.sql b/spring-5/src/main/resources/autogenkey-schema.sql new file mode 100644 index 0000000000..925b27143c --- /dev/null +++ b/spring-5/src/main/resources/autogenkey-schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS sys_message ( + id bigint(20) NOT NULL AUTO_INCREMENT, + message varchar(100) NOT NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/spring-5/src/test/java/com/baeldung/jdbc/autogenkey/GetAutoGenKeyByJDBC.java b/spring-5/src/test/java/com/baeldung/jdbc/autogenkey/GetAutoGenKeyByJDBC.java new file mode 100644 index 0000000000..c52e18ef7f --- /dev/null +++ b/spring-5/src/test/java/com/baeldung/jdbc/autogenkey/GetAutoGenKeyByJDBC.java @@ -0,0 +1,53 @@ +package com.baeldung.jdbc.autogenkey; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import com.baeldung.jdbc.autogenkey.repository.MessageRepositoryJDBCTemplate; +import com.baeldung.jdbc.autogenkey.repository.MessageRepositorySimpleJDBCInsert; + +@RunWith(SpringRunner.class) +public class GetAutoGenKeyByJDBC { + + @Configuration + @EnableAutoConfiguration + @PropertySource("classpath:autogenkey-db.properties") + @ComponentScan(basePackages = { "com.baeldung.jdbc.autogenkey.repository" }) + public static class SpringConfig { + + } + + @Autowired + MessageRepositorySimpleJDBCInsert messageRepositorySimpleJDBCInsert; + + @Autowired + MessageRepositoryJDBCTemplate messageRepositoryJDBCTemplate; + + final String MESSAGE_CONTENT = "Test"; + + @Test + public void insertJDBC_whenLoadMessageByKey_thenGetTheSameMessage() { + long key = messageRepositoryJDBCTemplate.insert(MESSAGE_CONTENT); + String loadedMessage = messageRepositoryJDBCTemplate.getMessageById(key); + + assertEquals(MESSAGE_CONTENT, loadedMessage); + + } + + @Test + public void insertSimpleInsert_whenLoadMessageKey_thenGetTheSameMessage() { + long key = messageRepositorySimpleJDBCInsert.insert(MESSAGE_CONTENT); + String loadedMessage = messageRepositoryJDBCTemplate.getMessageById(key); + + assertEquals(MESSAGE_CONTENT, loadedMessage); + } + +} diff --git a/spring-5/src/test/resources/logback-test.xml b/spring-5/src/test/resources/logback-test.xml new file mode 100644 index 0000000000..84f8e4706a --- /dev/null +++ b/spring-5/src/test/resources/logback-test.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file