Ben slick's documentation yaklaşık DatabaseConfig
okuyordu:Slick'te DatabaseConfig ve Veritabanı kullanımı arasındaki fark nedir?
Database
için yapılandırma sözdizimi üzerine
, bir Kaygan sürücü artı bir araya
Database
eşleşen yapılandırmanızı sağlarDatabaseConfig
şeklinde başka tabaka vardır. Bu, yapılandırma dosyasını yapılandırma dosyasını değiştirerek, özetinin farklı veritabanı sistemleri üzerinden yapılmasını kolaylaştırır.DatabaseConfig
Database
yaklaşımdan daha soyut temel veritabanı sistemi yapar nasıl bu bölümünü alamadım
? Varsayalım, ben şu testinde DatabaseConfig
kullanıyorum:
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))
}
}
i yapılandırma değişikliğin yanı sıra, PostgreSQL
den MySQL
benim temel veritabanı sistemi değiştirirseniz, görebileceğiniz gibi, ben import
ifadeyi değiştirmek gerektiğini postgre API'sini mysql'lere aktarır. Öte yandan, ben Database
kullanıyordum ise:
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))
}
}
i Database
kullanıyorum, altta yatan veritabanı üzerinde aynı değişim, iki değişikliklere neden olacaktır: yapılandırma dosyasındaki bir ve kaynak kodunda diğer. Bütün bunlar söylenince, bir yaklaşım diğerinden daha soyutdur? DatabaseConfig
yanlış mı kullanıyorum?
Teşekkürler..Ama varlık tanımlarımdaki 'dbConfig.driver.api._' öğesini nasıl kullanabilirim? 'Supplier'? Bu sınıflarda hala bazı veritabanı spesifik 'import' var. –
Bunu halledebileceğiniz birkaç farklı yol var. Varlık tanımına erişilebilen yapılandırma nesnesini tutacak bir nesne oluşturabilirsiniz. Daha sonra şema varlığında DbConfigHolderObject.dbConfig.driver.api._' dosyasını içe aktarabilirsiniz. Ayrıca, kurulumu yapan ve şema varlıklarına karıştıran bir özellik de oluşturabilirsiniz. – DemetriKots
Sadece bunu düşündüm ... Bunun en iyi yolu muhtemelen bir örtük kullanmak olacaktır. – DemetriKots