JdbcTemplate: add queryOne method
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
@@ -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}''",
|
||||
|
||||
Reference in New Issue
Block a user