Kotlin में डेटाबेस के साथ काम करने का परिचय
\n\nKotlin एक आधुनिक स्टैटिकली टाइप की गई भाषा है जो JVM पर चलती है, और अपनी संक्षिप्तता और सुरक्षा के कारण तेजी से लोकप्रियता प्राप्त कर रही है। किसी भी डेवलपर के लिए प्रमुख कौशलों में से एक डेटाबेस के साथ इंटरैक्ट करने की क्षमता है। इस लेख में, हम देखेंगे कि दो सबसे लोकप्रिय प्रकार के DB: रिलेशनल PostgreSQL और डॉक्यूमेंट-ओरिएंटेड MongoDB से कैसे कनेक्ट करें और बुनियादी संचालन (CRUD) करें।
\n\nहम आधुनिक लाइब्रेरी का उपयोग करेंगे जो इडियोमैटिक Kotlin के लिए अधिकतम रूप से अनुकूलित हैं:
\n- \n
- Exposed — SQL डेटाबेस (PostgreSQL, MySQL आदि) के लिए JetBrains का ORM-फ्रेमवर्क। \n
- KMongo — MongoDB के लिए रिएक्टिव ODM क्लाइंट, जो कोरूटीन पर बनाया गया है। \n
यह लेख शुरुआती लोगों के लिए है: हम प्रोजेक्ट सेटअप, DB से कनेक्शन और डेटा इन्सर्ट, रीड, अपडेट और डिलीट के सरल उदाहरणों पर चर्चा करेंगे।
\n\n1. प्रोजेक्ट सेटअप और डिपेंडेंसी जोड़ना
\n\nआरंभ करने के लिए, एक नया Kotlin प्रोजेक्ट बनाएं (उदाहरण के लिए, IntelliJ IDEA के माध्यम से Gradle या Maven के साथ)। build.gradle.kts फ़ाइल में आवश्यक डिपेंडेंसी जोड़ें।
PostgreSQL (Exposed) के लिए Gradle डिपेंडेंसी
\ndependencies {\n // Exposed\n implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n implementation("org.jetbrains.exposed:exposed-jdbc:0.44.1")\n\n // PostgreSQL ड्राइवर\n implementation("org.postgresql:postgresql:42.7.1")\n\n // कनेक्शन पूल (HikariCP)\n implementation("com.zaxxer:HikariCP:5.1.0")\n}\n\nMongoDB (KMongo) के लिए Gradle डिपेंडेंसी
\ndependencies {\n // KMongo (कोरूटीन के साथ)\n implementation("org.litote.kmongo:kmongo-coroutine:4.11.0")\n\n // Ktor क्लाइंट (यदि रिएक्टिव ड्राइवर की आवश्यकता हो)\n implementation("org.litote.kmongo:kmongo-async:4.11.0")\n}\n\nप्रोजेक्ट सिंक्रोनाइज़ेशन के बाद, आप कनेक्शन शुरू कर सकते हैं।
\n\n2. Exposed के माध्यम से PostgreSQL के साथ कार्य
\n\nExposed दो दृष्टिकोण प्रदान करता है: DSL (टाइप-सेफ SQL क्वेरी) और DAO (ऑब्जेक्ट-रिलेशनल मैपिंग)। हम DAO पर विचार करेंगे - यह शुरुआती लोगों के लिए अधिक सहज है।
\n\nडेटाबेस से कनेक्शन
\nimport org.jetbrains.exposed.sql.Database\nimport org.jetbrains.exposed.sql.transactions.transaction\nimport com.zaxxer.hikari.HikariConfig\nimport com.zaxxer.hikari.HikariDataSource\n\nfun connectToPostgres() {\n val config = HikariConfig().apply {\n jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"\n driverClassName = "org.postgresql.Driver"\n username = "user"\n password = "password"\n maximumPoolSize = 10\n }\n val dataSource = HikariDataSource(config)\n Database.connect(dataSource)\n println("PostgreSQL से कनेक्शन स्थापित!")\n}\n\nतालिका और एंटिटी की परिभाषा
\nimport org.jetbrains.exposed.dao.id.IntIdTable\nimport org.jetbrains.exposed.dao.IntEntity\nimport org.jetbrains.exposed.dao.IntEntityClass\n\n// तालिका को परिभाषित करें\nobject UsersTable : IntIdTable("users") {\n val name = varchar("name", 100)\n val email = varchar("email", 255).uniqueIndex()\n val age = integer("age").default(18)\n}\n\n// Entity (DAO) को परिभाषित करें\nclass UserEntity(id: EntityID<Int>) : IntEntity(id) {\n companion object : IntEntityClass<UserEntity>(UsersTable)\n\n var name by UsersTable.name\n var email by UsersTable.email\n var age by UsersTable.age\n}\n\nCRUD संचालन
\nfun performCRUD() {\n transaction {\n // तालिका बनाएं (यदि मौजूद नहीं है)\n SchemaUtils.create(UsersTable)\n\n // INSERT\n val newUser = UserEntity.new {\n name = "इवान पेट्रोव"\n email = "ivan@example.com"\n age = 25\n }\n println("उपयोगकर्ता बनाया गया")