From f82169130826c0b12981eeb352d6a24074cb2a46 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 3 Jan 2021 16:07:40 +0300 Subject: [PATCH] JdbcTemplate: add queryOne method --- src/main/java/ghast/database/JdbcOperations.java | 3 +++ src/main/java/ghast/database/JdbcTemplate.java | 11 +++++++++++ src/test/java/ghast/database/JdbcTemplateTest.java | 12 ++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/main/java/ghast/database/JdbcOperations.java b/src/main/java/ghast/database/JdbcOperations.java index 9d70f56..6a4aa50 100644 --- a/src/main/java/ghast/database/JdbcOperations.java +++ b/src/main/java/ghast/database/JdbcOperations.java @@ -2,6 +2,7 @@ package ghast.database; import java.util.List; import java.util.Map; +import java.util.Optional; public interface JdbcOperations { @@ -9,6 +10,8 @@ public interface JdbcOperations { T query(String sql, ResultSetExtractor rse) throws DataAccessException; + Optional queryOne(String sql, ResultSetExtractor rse) throws DataAccessException; + List queryList(String sql, RowMapper rowMapper) throws DataAccessException; Map queryForMap(String sql) throws DataAccessException; diff --git a/src/main/java/ghast/database/JdbcTemplate.java b/src/main/java/ghast/database/JdbcTemplate.java index 52ed3a4..3b91032 100644 --- a/src/main/java/ghast/database/JdbcTemplate.java +++ b/src/main/java/ghast/database/JdbcTemplate.java @@ -59,6 +59,17 @@ public class JdbcTemplate implements JdbcOperations { } } + @Override + public Optional queryOne(String sql, ResultSetExtractor rse) throws DataAccessException { + return query(sql, rs -> { + if (rs.next()) { + return Optional.ofNullable(rse.extractData(rs)); + } else { + return Optional.empty(); + } + }); + } + @Override public List queryList(String sql, final RowMapper rowMapper) throws DataAccessException { return query(sql, rs -> { diff --git a/src/test/java/ghast/database/JdbcTemplateTest.java b/src/test/java/ghast/database/JdbcTemplateTest.java index bbdc8bc..97a3f97 100644 --- a/src/test/java/ghast/database/JdbcTemplateTest.java +++ b/src/test/java/ghast/database/JdbcTemplateTest.java @@ -17,6 +17,7 @@ import java.sql.SQLException; import java.text.MessageFormat; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.StringJoiner; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -99,6 +100,17 @@ class JdbcTemplateTest { assertEquals(DATA[0][1], value); } + @Test + void testQuery_Simple_Optional() { + String sql = MessageFormat.format("SELECT {2} FROM {0} WHERE {1} LIKE ''{3}''", + TABLE_NAME, COLUMN_NAME, COLUMN_VALUE, DATA[0][0]); + + Optional optValue = jdbcTemplate.queryOne(sql, rs -> rs.getInt(1)); + + assertTrue(optValue.isPresent()); + assertEquals(DATA[0][1], optValue.get()); + } + @Test void testQuery_Simple_List() { String sql = MessageFormat.format("SELECT {2} FROM {0} WHERE {1} LIKE ''{3}'' OR {1} LIKE ''{4}''",