diff options
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.java | 40 |
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; + } + } + }); } } |