Kotlin के लिए ORM: तुलना और उदाहरण (Exposed, Ktorm, Hibernate)

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

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

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

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



Kotlin में विकास करते समय, उपयुक्त ORM (Object-Relational Mapping) का चयन एक महत्वपूर्ण चरण है जो प्रदर्शन, कोड पठनीयता और रखरखाव में आसानी को प्रभावित करता है। इस लेख में हम तीन लोकप्रिय समाधानों की तुलना करेंगे: Exposed (JetBrains की आधिकारिक लाइब्रेरी), Ktorm (हल्की DSL-उन्मुख ORM) और Hibernate (क्लासिक भारी-भरकम)। हम उनकी ताकत, विशेषताओं और काम करने वाले उदाहरणों पर चर्चा करेंगे।



1. Exposed — JetBrains का विकल्प



Exposed एक ORM है जिसे विशेष रूप से Kotlin के लिए JetBrains कंपनी ने विकसित किया है। यह दो दृष्टिकोण प्रदान करता है: DSL (प्रकार-सुरक्षित) और DAO (Data Access Objects)। मुख्य लाभ भाषा के साथ पूर्ण एकीकरण है: तालिकाओं को Kotlin ऑब्जेक्ट के रूप में वर्णित किया जाता है, क्वेरीज़ संकलन चरण में जाँची जाती हैं।



उदाहरण (DSL-दृष्टिकोण):

import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction

object Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 50) val email = varchar("email", 100).uniqueIndex() override val primaryKey = PrimaryKey(id)}

fun main() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver") transaction { SchemaUtils.create(Users) Users.insert { it[name] = "इवान" it[email] = "ivan@example.com" } val result = Users.selectAll().map { "${it[Users.name]} - ${it[Users.email]}" } println(result) // [इवान - ivan@example.com] }}


विशेषताएँ:

  • प्रकार-सुरक्षित क्वेरीज़ (कम runtime त्रुटियाँ)।
  • रिफ्लेक्शन की कोई आवश्यकता नहीं (Hibernate से तेज़)।
  • exposed-migration के माध्यम से माइग्रेशन समर्थन।
  • XML या एनोटेशन सेटअप की आवश्यकता नहीं — सब कुछ कोड में।


2. Ktorm — हल्कापन और लचीलापन



Ktorm एक न्यूनतम ORM है जो SQL क्वेरीज़ बनाने के लिए Kotlin DSL का उपयोग करता है। Exposed के विपरीत, यह स्वचालित रूप से SQL उत्पन्न नहीं करता, बल्कि आपको लगभग शुद्ध SQL की तरह क्वेरीज़ लिखने की अनुमति देता है, लेकिन प्रकार जाँच के साथ।



उदाहरण:

import me.liuwj.ktorm.database.Databaseimport me.liuwj.ktorm.entity.*import me.liuwj.ktorm.schema.*

interface User : Entity<User> { companion object : Entity.Factory<User>() val id: Int val name: String val email: String}

object Users : Table<User>("users") { val id = int("id").primaryKey().bindTo { it.id } val name = varchar("name").bindTo { it.name } val email = varchar("email").bindTo { it.email }}

fun main() { val database = Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver") database.sequenceOf(Users).toList() // सभी उपयोगकर्ता प्राप्त करें // सम्मिलन: val user = User { name = "पीटर" email = "petr@example.com" } database.users.add(user)}


विशेषताएँ:

  • SQL के सबसे करीब — क्वेरीज़ को अनुकूलित करना आसान।
  • छोटा JAR आकार (~200 KB)।
  • एक्सटेंशन समर्थन: ktorm-jackson, ktorm-spring-support।
  • फ़ील्ड के स्पष्ट बंधन (bindTo) की आवश्यकता है, जो boilerplate बढ़ाता है।


3. Hibernate — सिद्ध मानक



Hibernate Java दुनिया से एक शक्तिशाली लेकिन भारी ORM है। Kotlin में इसका उपयोग एनोटेशन या XML के माध्यम से किया जाता है। Hibernate कैशिंग, आलसी लोडिंग और स्कीमा जनरेशन पर पूर्ण नियंत्रण प्रदान करता है। हालाँकि, रिफ्लेक्शन और प्रॉक्सी क्लासेस के कारण data class के साथ समस्याएँ हो सकती हैं (open की आवश्यकता है)।



उदाहरण:

import javax.persistence.*

@Entity@Table(name = "users")data class User( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Int = 0, @Column(nullabl

अनुशंसाएँ