src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java

changeset 47
57cfb94ab99f
parent 38
cf85ef18f231
child 51
dd0a45ae25d7
--- a/src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java	Wed May 13 21:46:26 2020 +0200
+++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java	Thu May 14 22:48:01 2020 +0200
@@ -28,7 +28,7 @@
  */
 package de.uapcore.lightpit.dao.postgres;
 
-import de.uapcore.lightpit.dao.AbstractDao;
+import de.uapcore.lightpit.dao.GenericDao;
 import de.uapcore.lightpit.dao.UserDao;
 import de.uapcore.lightpit.entities.User;
 
@@ -36,26 +36,41 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
 
-public final class PGUserDao extends AbstractDao<User> implements UserDao {
+import static de.uapcore.lightpit.dao.Functions.setStringOrNull;
+
+public final class PGUserDao implements UserDao, GenericDao<User> {
 
-    private final PreparedStatement insert;
-    private final PreparedStatement update;
+    public static final String[] COLUMNS = {
+            "id", "username", "lastname", "givenname", "mail"
+    };
+
+    private final PreparedStatement insert, update, list, find;
 
     public PGUserDao(Connection connection) throws SQLException {
-        super(connection.prepareStatement("select * from lpit_user where userid >= 0 order by username"));
+        list = connection.prepareStatement(
+                "select userid, username, lastname, givenname, mail " +
+                        "from lpit_user where userid >= 0 " +
+                        "order by username");
+        find = connection.prepareStatement(
+                "select userid, username, lastname, givenname, mail " +
+                        "from lpit_user where userid = ? ");
 
         insert = connection.prepareStatement("insert into lpit_user (username, lastname, givenname, mail) values (?, ?, ?, ?)");
         update = connection.prepareStatement("update lpit_user set lastname = ?, givenname = ?, mail = ? where userid = ?");
     }
 
-    @Override
-    public User mapColumns(ResultSet result, String q) throws SQLException {
-        final var user = new User(result.getInt(qual(q, "userid")));
-        user.setUsername(result.getString(qual(q, "username")));
-        user.setGivenname(result.getString(qual(q, "givenname")));
-        user.setLastname(result.getString(qual(q, "lastname")));
+    public User mapColumns(ResultSet result) throws SQLException {
+        final int id = result.getInt("userid");
+        if (id == 0) return null;
+        final var user = new User(id);
+        user.setUsername(result.getString("username"));
+        user.setGivenname(result.getString("givenname"));
+        user.setLastname(result.getString("lastname"));
+        user.setMail(result.getString("mail"));
         return user;
     }
 
@@ -77,4 +92,27 @@
         update.setInt(4, instance.getUserID());
         return update.executeUpdate() > 0;
     }
+
+    @Override
+    public List<User> list() throws SQLException {
+        List<User> users = new ArrayList<>();
+        try (var result = list.executeQuery()) {
+            while (result.next()) {
+                users.add(mapColumns(result));
+            }
+        }
+        return users;
+    }
+
+    @Override
+    public User find(int id) throws SQLException {
+        find.setInt(1, id);
+        try (var result = find.executeQuery()) {
+            if (result.next()) {
+                return mapColumns(result);
+            } else {
+                return null;
+            }
+        }
+    }
 }

mercurial