設定構文の上に
Database
のために、あなたが一緒に スリックドライバープラス一致Database
を設定することができますDatabaseConfig
の形で別の 層があります。 コンフィグレーションファイルを変更するだけで、さまざまな種類のデータベースシステムに簡単にアクセスできます。DatabaseConfig
がDatabase
アプローチよりも抽象的基盤となるデータベースシステムを作るどのように私はこの部分を得ることはありません
、?仮定し、私は次のテストでDatabaseConfig
を使用しています:
import org.scalatest.{Matchers, FlatSpec}
import slick.backend.DatabaseConfig
import slick.driver.JdbcProfile
import slick.driver.PostgresDriver.api._
import scala.concurrent.ExecutionContext.Implicits.global
class DatabaseConfigTest extends FlatSpec with Matchers {
def withDb(test: DatabaseConfig[JdbcProfile] => Any) = {
val dbConfig = DatabaseConfig.forConfig[JdbcProfile]("abstract")
try test(dbConfig)
finally dbConfig.db.close()
}
"DatabaseConfig" should "work" in withDb { dbConfig =>
import Supplier._
val cities = suppliers.map(_.city)
dbConfig.db.run(cities.result).map(_.foreach(println))
}
}
私は、構成の変更に加えて、PostgreSQL
からMySQL
に私の基盤となるデータベースシステムを変更する場合は、見ることができるように、私はimport
文を変更する必要があることpostgre APIをmysqlにインポートします。一方、私はDatabase
を使用していた場合は、次のソースコード内の設定ファイルに1つ、他:私は、基礎となるデータベースに同じ変更をDatabase
を使用している場合は
import org.scalatest.{FlatSpec, Matchers}
import slick.driver.PostgresDriver.api._
import slick.jdbc.JdbcBackend.Database
import scala.concurrent.ExecutionContext.Implicits.global
class DatabaseTest extends FlatSpec with Matchers {
def withDb(test: Database => Any) = {
val db = Database.forConfig("default")
try test(db)
finally db.close()
}
"Supplier names" should "be fetched" in withDb { db =>
import Supplier._
val names = suppliers.map(_.name)
db.run(names.result).map(_.foreach(println))
}
}
、2つの変化をもたらすでしょう。これらのすべてが言われて、どのアプローチが他のアプローチよりも抽象的であるか? DatabaseConfig
を間違って使用していますか?
ありがとうございます。私のエンティティ定義で 'dbConfig.driver.api._'をどうすれば使用できますか?サプライヤ?私はまだそれらのクラスにデータベース固有の 'import'を持っています。 –
これを処理できる方法はいくつかあります。エンティティ定義にアクセス可能な設定オブジェクトを保持するオブジェクトを作成できます。スキーマエンティティ内で、 'DbConfigHolderObject.dbConfig.driver.api._'をインポートできます。また、セットアップを行い、それをスキーマエンティティに混在させる特性を作成することもできます。 – DemetriKots
ちょうどこれを考えた...私はそれを処理する最善の方法はおそらく暗黙的に使用することだと思う。 – DemetriKots