2016-05-21 4 views
2

Я немного боюсь в Slick, и я - недавний усыновитель Scala/Slick. Я привык к Hibernate и/или Rails ActiveRecord, но у меня есть немного сложности с подключением большого количества таблиц.Как думать Слик?

У меня есть следующий класс.

case class User(id: UUID, ..., profile: UserProfile) 
case class UserProfile(id: UUID, ..., address: Address) 
case class Address(id: UUID, ...) 

Я пытаюсь иметь это в качестве модели предметной области и имеющее Постоянство уровня только выборку и объединения таблиц, чтобы вернуть домен один объект.

  1. Это правильный способ сделать это в пятно?
  2. Есть ли способ кэшировать результаты запроса, а не постоянно запрашивать базу данных?
  3. Помогает ли это Lib?
  4. Каков наилучший способ соединения, например, этих трех таблиц? 1 Запросить каждую из них через отдельные DAO или Внутренние соединения и использовать группу Scala GroupBy?

Извините, если это вопрос «новогодний». Я просто пытаюсь понять, как «Думать, что он».

ответ

0

Я написал небольшой учебник по игре + пятно некоторое время назад. проверить его и посмотреть, если это помогает http://pedrorijo.com/blog/play-slick/

я обычно:

case class CaseClassA(field1, field2, caseClassB_Id) 
case class CaseClassB(field3, field4) 

но, возможно, есть лучший подход

+0

Дело в том, что я не хочу иметь идентификаторы в своих классах доменов. Я пытаюсь сделать Hibernate Style – Driver

+0

да, но Hibernate - это ORM, а «Slick - это современный запрос к базе данных и библиотека доступа для Scala». Тем не менее, если кто-то может предложить лучший подход к переходу других классов домена в случайный случай класс, я был бы рад узнать – pedrorijo91

+0

Хорошо. Понял. 1 шт. Каков наилучший способ присоединиться к этим таблицам. Несколько запросов, или Присоединиться к таблицам и в памяти groupBy? – Driver

2
  1. Там не правильный способ сделать это. Это зависит от того, что вам нужно делать с вашей моделью ... Существует правильный способ моделирования модели реляционной базы данных, но вы уже это знаете.
  2. Слик не использует никаких кешей, см. here. Но если вы используете Play Framework, например, он предоставляет CacheApi, но у меня нет опыта или совета для этого. Но для запросов вы можете получить некоторое «кэширование», например compiled queries.
  3. Возможно, да, для простых случаев, простых таблиц и т. Д. Но вы также можете использовать Hibernate для этого, который намного старше и надежнее.
  4. Я тоже застрял в этом, когда был новичком Scala/Slick, поэтому написал blog об этом (он тоже на Slick 3rd party docs, да я хвастаюсь: p). Для этого есть и простой сопутствующий проект.

Понимание простого SQL, его соединений и т. Д. Помогает при использовании Slick. Например, вопрос о внешнем соединении (влево/вправо) и другие интересные вопросы.

+0

То, что я пытаюсь достичь, и я делаю это во всех приложениях, которые я разрабатываю, у меня есть доменный слой, где я сохраняю свои агностики для бизнес-сетей/доменов, где у меня есть интерфейсы DAO или Repo, которые реализованы уровнем доступа к данным, которые будут взаимодействовать с базой данных – Driver

+0

Это не должно быть проблемой, вы просто вводили бы DAO в свою службу (уровень Busines/Domain). Но это еще один вопрос, который так не считает Слик. Кроме того, если у вас есть таблицы Slick, разделенные в файлах, вы можете использовать собственный тип Scala для ввода драйвера из DAO, который затем можно просто переключить (например, с MySQL на H2), как в этом примере PlaySlick [пример] (https : //github.com/playframework/play-slick/blob/master/samples/computer-database/app/dao/CompaniesDAO.scala). –

 Смежные вопросы

  • Нет связанных вопросов^_^