0

JdbcTemplate: add queryOne method

This commit is contained in:
2021-01-03 16:07:40 +03:00
parent c963c4bd60
commit f821691308
3 changed files with 26 additions and 0 deletions

View File

@@ -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> T query(String sql, ResultSetExtractor<T> rse) throws DataAccessException;
<T> Optional<T> queryOne(String sql, ResultSetExtractor<T> rse) throws DataAccessException;
<T> List<T> queryList(String sql, RowMapper<T> rowMapper) throws DataAccessException;
Map<String, Object> queryForMap(String sql) throws DataAccessException;

View File

@@ -59,6 +59,17 @@ public class JdbcTemplate implements JdbcOperations {
}
}
@Override
public <T> Optional<T> queryOne(String sql, ResultSetExtractor<T> rse) throws DataAccessException {
return query(sql, rs -> {
if (rs.next()) {
return Optional.ofNullable(rse.extractData(rs));
} else {
return Optional.empty();
}
});
}
@Override
public <T> List<T> queryList(String sql, final RowMapper<T> rowMapper) throws DataAccessException {
return query(sql, rs -> {

View File

@@ -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<Integer> 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}''",