summaryrefslogtreecommitdiff
path: root/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlDao.java
diff options
context:
space:
mode:
Diffstat (limited to 'sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlDao.java')
-rw-r--r--sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlDao.java40
1 files changed, 27 insertions, 13 deletions
diff --git a/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlDao.java b/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlDao.java
index 2c82474..c253229 100644
--- a/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlDao.java
+++ b/sql-persistence/src/main/java/io/trygvis/persistence/sql/SqlDao.java
@@ -7,12 +7,12 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
-public abstract class SqlDao<Id, T> implements FromResultSet<T> {
+public abstract class SqlDao<Id, T, S extends SqlSession, Row> {
- protected final Connection c;
+ protected final S session;
- protected SqlDao(Connection c) {
- this.c = c;
+ protected SqlDao(S session) {
+ this.session = session;
}
public abstract void insert(T o) throws SQLException;
@@ -31,16 +31,30 @@ public abstract class SqlDao<Id, T> implements FromResultSet<T> {
// Protected
// -----------------------------------------------------------------------
- protected static <T> List<T> runQuery(Connection c, String sql, FromResultSet<T> f) throws SQLException {
- try (PreparedStatement stmt = c.prepareStatement(sql)) {
- ResultSet rs = stmt.executeQuery();
+ protected abstract Row newRow(ResultSet rs) throws SQLException;
- List<T> list = new ArrayList<>();
- while (rs.next()) {
- list.add(f.fromResultSet(rs));
- }
+ protected abstract T newEntity(Row row) throws SQLException;
+
+ protected List<T> runQuery(final String sql) throws SQLException {
+ return session.query(new SqlExecutor.QueryCommand<T>() {
+ @Override
+ public List<T> run(Connection c) throws SQLException {
+ try (PreparedStatement stmt = c.prepareStatement(sql)) {
+ ResultSet rs = stmt.executeQuery();
+
+ List<Row> rows = new ArrayList<>();
+ while (rs.next()) {
+ rows.add(newRow(rs));
+ }
- return list;
- }
+ List<T> entities = new ArrayList<T>(rows.size());
+ for (Row row : rows) {
+ entities.add(newEntity(row));
+ }
+
+ return entities;
+ }
+ }
+ });
}
}