मैं DatabaseConfig
के बारे में slick's documentation में पढ़ रहा था:Slick में डेटाबेस कॉन्फ़िगर और डेटाबेस का उपयोग करने के बीच क्या अंतर है?
Database
के लिए विन्यास वाक्य रचना के शीर्ष पर, वहाँDatabaseConfig
का रूप है जो आप एक स्लिक ड्राइवर के साथ साथ एक साथ मिलानDatabase
कॉन्फ़िगर कर सकते हैं में एक और परत है। यह को आसानी से कॉन्फ़िगरेशन फ़ाइल बदलकर विभिन्न प्रकार के डेटाबेस सिस्टम पर सार बनाना आसान बनाता है।
मैं इस हिस्से नहीं मिलता है, कैसे 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
बयान बदलने की जरूरत है कि mygql के लिए पोस्टग्रे एपीआई आयात करता है। दूसरी ओर, अगर मैं 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))
}
}
जब मैं Database
उपयोग कर रहा हूँ, अंतर्निहित डेटाबेस पर भी यही बदलाव, दो परिवर्तन में परिणाम होगा: विन्यास फाइल में एक और स्रोत कोड में अन्य। इन सभी के साथ, एक दृष्टिकोण दूसरे की तुलना में अधिक सार कैसे है? क्या मैं DatabaseConfig
गलत उपयोग कर रहा हूँ?
धन्यवाद..लेकिन मैं अपनी इकाई परिभाषाओं में 'dbConfig.driver.api._' का उपयोग कैसे कर सकता हूं। 'Supplier'? मेरे पास अभी भी उन वर्गों में कुछ डेटाबेस विशिष्ट 'आयात' है। –
कुछ अलग-अलग तरीके हैं जिन्हें आप इसे संभाल सकते हैं। आप कॉन्फ़िगरेशन ऑब्जेक्ट को पकड़ने के लिए ऑब्जेक्ट बना सकते हैं जो इकाई परिभाषा के लिए सुलभ है। फिर स्कीमा इकाई के भीतर आप 'DbConfigHolderObject.dbConfig.driver.api._' आयात कर सकते हैं। आप एक विशेषता भी बना सकते हैं जो सेटअप करता है और इसे स्कीमा इकाइयों में मिला देता है। – DemetriKots
बस इस बारे में सोचा ... मुझे लगता है कि इसे संभालने का सबसे अच्छा तरीका शायद एक अंतर्निहित उपयोग करना होगा। – DemetriKots