Заполнить класс дела из БД ResultSet - PullRequest
0 голосов
/ 29 марта 2020

У меня есть следующий код, который я использую для извлечения данных из базы данных и последующего заполнения класса.

Если имена столбцов и свойства класса идентичны, существует ли более элегантный способ заполнения класса кроме двухэтапного процесса, который у меня сейчас есть - (1) создание переменных, а затем (2) заполнение объекта переменными?

Как вы можете оценить, когда у класса много свойств - там много удвоенный код для ввода, который я бы хотел избежать.

Обновлено: Спасибо за предложение использовать Doob ie / Anorm / et c. Но я намеренно хочу написать слой постоянства как учебное упражнение Scala / FP. я также понимаю, что макросы меняются в Scala 3 - что не так уж и далеко сейчас - поэтому я предпочел бы найти решение, применимое после обновления; Спасибо!

def getGroups(): Vector[Group] = {

    def createGroup(groupname: String) = {
      Group(groupName = groupname
            ...
            ...
            ...
      )
    }

    // Get the rows returned from the database.
    val dbResults = Try { selectAllFromTable("groups") }

    dbResults match {
      case Success(rs) => {
        // Create an Iterator[]
        ResultSetUtils.toIterator(rs) { rs =>
          createGroup(
            rs.getString("groupname")
            ...
            ...
            ...
          )
        }
      }.toVector

      case Failure(ex) =>
        Vector.empty[Group]
    }
  }

1 Ответ

0 голосов
/ 06 апреля 2020

Спасибо, Игорь,

Я наконец-то понял, что вы говорите, и избавился от метода createGroup. что, конечно, означало, что я больше не «набирал» дважды создание и заполнение класса дел.

Теперь у меня просто есть;

def getGroups(): Vector[Group] = {

    // Get the rows returned from the database.
    val dbResults = Try { selectAllFromTable("groups") }

    dbResults match {
      case Success(rs) => {
        // Create an Iterator[]
        ResultSetUtils.toIterator(rs) { rs =>
          Group(
            rs.getString("groupname")
            ...
            ...
            ...
          )
        }
      }.toVector

      case Failure(ex) =>
        Vector.empty[Group]
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...