Kotlin के लिए ORM: Exposed, Room और Ktorm की तुलना उदाहरणों के साथ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin के लिए ORM: तुलना और उदाहरण

Kotlin में एप्लिकेशन विकसित करते समय डेटाबेस के साथ काम करना प्रमुख कार्यों में से एक है। कच्चे SQL क्वेरी लिखने के बजाय, डेवलपर्स अब तेजी से ORM (Object-Relational Mapping) का उपयोग कर रहे हैं - ऐसे उपकरण जो ऑब्जेक्ट मॉडल और रिलेशनल टेबल के बीच डेटा रूपांतरण को स्वचालित करते हैं। इस लेख में, हम Kotlin के लिए तीन लोकप्रिय ORM पर चर्चा करेंगे: Exposed, Room और Ktorm। हम उनकी आर्किटेक्चर, प्रदर्शन, उपयोग में आसानी की तुलना करेंगे और व्यावहारिक कोड उदाहरण प्रस्तुत करेंगे।



1. Exposed - JetBrains की हल्की DSL लाइब्रेरी

Exposed Kotlin के निर्माताओं द्वारा विकसित एक लाइब्रेरी है। यह शास्त्रीय अर्थों (जैसे Hibernate) में पूर्ण ORM नहीं है, बल्कि दो दृष्टिकोण प्रदान करती है: Kotlin शैली में क्वेरी लिखने के लिए DSL (Domain Specific Language) और ऑब्जेक्ट के साथ काम करने के लिए DAO (Data Access Objects)। Exposed JDBC के ऊपर काम करता है और PostgreSQL, MySQL, H2, SQLite और अन्य का समर्थन करता है।



Exposed (DSL) के साथ कोड उदाहरण

// डेटाबेस से कनेक्शनDatabase.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

// तालिका की परिभाषाobject Users : Table("users") { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age") override val primaryKey = PrimaryKey(id)}

// इन्सर्ट और सिलेक्शनtransaction { SchemaUtils.create(Users) Users.insert { it[name] = "Alice" it[age] = 30 } Users.selectAll().forEach { println("${it[Users.name]}: ${it[Users.age]}") }}


Exposed के फायदे और नुकसान

  • फायदे: हल्का वजन, SQL पर पूर्ण नियंत्रण, Kotlin Coroutines के साथ अच्छा एकीकरण, सक्रिय समुदाय।
  • नुकसान: स्वचालित स्कीमा जनरेशन का अभाव (मैन्युअल रूप से बनाना होता है), माइग्रेशन के लिए कोई अंतर्निहित समर्थन नहीं (Flyway या Liquibase की आवश्यकता है)।


2. Room - Google का Android के लिए आधिकारिक ORM

Room Android Jetpack का हिस्सा है। यह SQLite के ऊपर एक एब्स्ट्रैक्शन लेयर प्रदान करता है और डेटा एक्सेस के लिए स्वचालित रूप से कोड जनरेट करता है। Room एनोटेशन और बिल्ड-टाइम कंपाइलेशन (KAPT या KSP) का उपयोग करता है, जो उच्च प्रदर्शन और टाइप सुरक्षा सुनिश्चित करता है।



Room के साथ कोड उदाहरण

// एंटिटी@Entity(tableName = "users")data class User(    @PrimaryKey(autoGenerate = true) val id: Int = 0,    val name: String,    val age: Int)

// DAO@Daointerface UserDao { @Query("SELECT * FROM users") suspend fun getAll(): List<User>

@Insert suspend fun insert(user: User)}

// डेटाबेस@Database(entities = [User::class], version = 1)abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao}


Room के फायदे और नुकसान

  • फायदे: Android के साथ पूर्ण एकीकरण, Flow और LiveData के लिए समर्थन, स्वचालित कोड जनरेशन, अंतर्निहित माइग्रेशन।
  • नुकसान: Android प्लेटफॉर्म से बंधा हुआ (सर्वर या डेस्कटॉप एप्लिकेशन के लिए उपयुक्त नहीं), Exposed की तुलना में भारी।


3. Ktorm - Kotlin के लिए कार्यात्मक ORM

Ktorm एक आधुनिक ORM लाइब्रेरी है जो डेटाबेस के साथ काम करने के लिए कार्यात्मक शैली प्रदान करती है। यह एनोटेशन और रिफ्लेक्शन का उपयोग नहीं करती, बल्कि Kotlin DSL और एक्सटेंशन पर निर्भर करती है। Ktorm कई DBMS (MySQL, PostgreSQL, Oracle, SQLite और अन्य) का समर्थन करती है और JDBC और SQL डायलेक्ट दोनों के साथ काम कर सकती है।



Ktorm के साथ कोड उदाहरण

// कनेक्शन और तालिका की परिभाषाval database = Database.connect("jdbc:mysql://localhost/mydb", user = "root", password = "pass")

object Users : Table<Nothing>("users") { val id = int("id").primaryKey() val name = varch

अनुशंसाएँ