परिचय: Kotlin और डेटाबेस एक आदर्श जोड़ी क्यों हैं
Kotlin एक आधुनिक स्थिर रूप से टाइप की गई भाषा है जो JVM के ऊपर काम करती है। संक्षिप्त सिंटैक्स, null सुरक्षा और Java के साथ पूर्ण संगतता के कारण, Kotlin बैकएंड डेवलपमेंट के लिए सबसे तेजी से बढ़ने वाली भाषाओं में से एक बन गई है। इस लेख में, हम दो लोकप्रिय DBMS: रिलेशनल PostgreSQL और डॉक्यूमेंट-ओरिएंटेड MongoDB से कनेक्ट होने और CRUD-संचालन करने का तरीका समझेंगे।
हम दो मुख्य दृष्टिकोणों पर विचार करेंगे: SQL के लिए Exposed लाइब्रेरी का उपयोग और MongoDB के साथ काम करने के लिए KMongo फ्रेमवर्क का उपयोग। सभी कोड उदाहरण शुद्ध Kotlin में लिखे गए हैं और चलाने के लिए तैयार हैं।
1. Exposed लाइब्रेरी के माध्यम से PostgreSQL के साथ कार्य
1.1. निर्भरताएँ सेट करना
आरंभ करने के लिए, build.gradle.kts फ़ाइल में निम्नलिखित निर्भरताएँ जोड़ें:
dependencies { implementation("org.jetbrains.exposed:exposed-core:0.44.0") implementation("org.jetbrains.exposed:exposed-dao:0.44.0") implementation("org.jetbrains.exposed:exposed-jdbc:0.44.0") implementation("org.postgresql:postgresql:42.6.0") implementation("com.zaxxer:HikariCP:5.0.1")}HikariCP एक उच्च-प्रदर्शन कनेक्शन पूल है जिसका उपयोग हम DB कनेक्शन प्रबंधित करने के लिए करेंगे।
1.2. डेटाबेस से कनेक्शन
कनेक्शन प्रबंधित करने के लिए एक ऑब्जेक्ट बनाएँ:
import com.zaxxer.hikari.HikariConfigimport com.zaxxer.hikari.HikariDataSourceimport org.jetbrains.exposed.sql.Database
object DatabaseFactory { fun init() { val config = HikariConfig().apply { driverClassName = "org.postgresql.Driver" jdbcUrl = "jdbc:postgresql://localhost:5432/my_db" username = "user" password = "password" maximumPoolSize = 10 isAutoCommit = false }
val dataSource = HikariDataSource(config) Database.connect(dataSource) }}1.3. तालिकाओं और CRUD-संचालन की परिभाषा
Exposed तालिकाओं का वर्णन करने के लिए DSL-शैली का उपयोग करता है। आइए एक सरल उपयोगकर्ता तालिका परिभाषित करें:
import org.jetbrains.exposed.sql.Tableimport org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
object Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 100) val email = varchar("email", 255).uniqueIndex()
override val primaryKey = PrimaryKey(id)}
// डेटा सम्मिलित करनाfun insertUser(name: String, email: String) { transaction { Users.insert { it[Users.name] = name it[Users.email] = email } }}
// सभी उपयोगकर्ताओं को पढ़नाfun getAllUsers(): List<ResultRow> { return transaction { Users.selectAll().toList() }}
// ईमेल अपडेट करनाfun updateUserEmail(id: Int, newEmail: String) { transaction { Users.update({ Users.id eq id }) { it[email] = newEmail } }}
// उपयोगकर्ता हटानाfun deleteUser(id: Int) { transaction { Users.deleteWhere { Users.id eq id } }}1.4. Exposed की विशेषताएँ
- लेन-देन: सभी संचालन
transactionब्लॉक के अंदर निष्पादित होते हैं। - प्रकार सुरक्षा: SQL क्वेरी में त्रुटियाँ संकलन चरण में पकड़ी जाती हैं।
- माइग्रेशन: Exposed
SchemaUtils.create(Users)के माध्यम से तालिकाओं के स्वचालित निर्माण का समर्थन करता है।
2. KMongo के माध्यम से MongoDB के साथ कार्य
2.1. निर्भरताएँ सेट करना
build.gradle.kts में जोड़ें:
dependencies { implementation("org.litote.kmongo:kmongo-coroutine:4.9.0") implementation("org.litote.kmongo:kmongo-id:4.9.0")}<