Kotlin के लिए ORM: तुलना और उदाहरण
\n\nKotlin एक आधुनिक भाषा है जिसका उपयोग बैकएंड एप्लिकेशन, Android एप्लिकेशन और यहां तक कि क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट विकसित करने के लिए सक्रिय रूप से किया जाता है। डेटाबेस के साथ काम करने के लिए, डेवलपर्स अक्सर ORM (Object-Relational Mapping) चुनते हैं ताकि कच्चे SQL क्वेरी लिखने से बचा जा सके और विकास में तेजी लाई जा सके। इस लेख में, हम Kotlin के लिए तीन लोकप्रिय ORM टूल देखेंगे: Exposed, Ktor (Exposed के साथ संयोजन में) और Ktorm। हम व्यावहारिक उदाहरणों पर उनके सिंटैक्स, प्रदर्शन और उपयोग में आसानी की तुलना करेंगे।
\n\n1. Exposed — JetBrains का आधिकारिक ORM
\n\nExposed JetBrains द्वारा विशेष रूप से Kotlin के लिए विकसित एक ORM लाइब्रेरी है। यह दो दृष्टिकोणों का समर्थन करता है: DSL (Domain Specific Language) और DAO (Data Access Objects)। Exposed Ktor फ्रेमवर्क के साथ पूरी तरह से एकीकृत होता है, लेकिन इसका उपयोग अलग से भी किया जा सकता है।
\n\nमुख्य विशेषताएं:
\n- \n
- हल्का और सहज ज्ञान युक्त DSL सिंटैक्स। \n
- लेन-देन, माइग्रेशन और कनेक्शन के लिए समर्थन। \n
- PostgreSQL, MySQL, H2, SQLite और अन्य डेटाबेस के साथ काम करता है। \n
- सक्रिय समुदाय और आधिकारिक दस्तावेज़ीकरण। \n
कोड उदाहरण (DSL दृष्टिकोण):
\nimport org.jetbrains.exposed.sql.*\nimport org.jetbrains.exposed.sql.transactions.transaction\n\n// तालिका की परिभाषा\nobject Users : Table() {\n val id = integer("id").autoIncrement()\n val name = varchar("name", 50)\n val age = integer("age")\n\n override val primaryKey = PrimaryKey(id)\n}\n\n// क्वेरी का उदाहरण\nfun main() {\n Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")\n\n transaction {\n SchemaUtils.create(Users)\n\n // सम्मिलन\n Users.insert {\n it[name] = "Alice"\n it[age] = 30\n }\n\n // चयन\n val result = Users.selectAll().where { Users.age greater 25 }\n result.forEach {\n println("${it[Users.name]}: ${it[Users.age]}")\n }\n }\n}\n\n2. Ktor + Exposed — वेब एप्लिकेशन के लिए संयोजन
\n\nKtor Kotlin के लिए एक एसिंक्रोनस वेब फ्रेमवर्क है। हालांकि Ktor स्वयं कोई अंतर्निहित ORM प्रदान नहीं करता है, यह Exposed के साथ मिलकर बहुत अच्छा काम करता है। ऐसा संयोजन न्यूनतम कोड के साथ REST API बनाने की अनुमति देता है।
\n\nKtor को Exposed के साथ एकीकृत करने का उदाहरण:
\nimport io.ktor.server.application.*\nimport io.ktor.server.routing.*\nimport io.ktor.server.response.*\nimport org.jetbrains.exposed.sql.*\nimport org.jetbrains.exposed.sql.transactions.transaction\n\nfun Application.module() {\n Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")\n\n routing {\n get("/users") {\n val users = transaction {\n Users.selectAll().map {\n mapOf("name" to it[Users.name], "age" to it[Users.age])\n }\n }\n call.respond(users)\n }\n }\n}\n\nयह दृष्टिकोण माइक्रोसर्विसेज और छोटे प्रोजेक्ट के लिए उपयुक्त है जहां सरलता और विकास की गति महत्वपूर्ण है।
\n\n3. Ktorm — हल्का और उच्च प्रदर्शन वाला ORM
\n\nKtorm Kotlin के लिए एक और लोकप्रिय ORM है जो प्रदर्शन और न्यूनतमता पर केंद्रित है। यह कार्यात्मक प्रोग्रामिंग का उपयोग करता है और DSL के साथ-साथ SQL-जैसे सिंटैक्स दोनों का समर्थन करता है।
\n\nमुख्य विशेषताएं:
\n- \n
- रिफ्लेक्शन की अनुपस्थिति के कारण उच्च प्रदर्शन। \n
- एक्सटेंशन के लिए समर्थन (उदाहरण के लिए, JSON फ़ील्ड के लिए)। \n
- सरल कॉन्फ़िगरेशन और न्यूनतम निर्भरताएं। \n
- अधिकांश लोकप्रिय DBMS के साथ काम करता है। \n
Ktorm कोड उदाहरण:
\nimport me.liuwj.ktorm.database.Database\nimport me.liuwj.ktorm.dsl.*\nimport me.liuwj.ktorm.entity.*\n\n// इकाई की परिभाषा\ninterface User : Entity {\n compan