Exposed Kotlin: पूरी गाइड उदाहरणों के साथ

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

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

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

Exposed क्या है और इसकी आवश्यकता क्यों है?

Exposed, JetBrains द्वारा विकसित Kotlin प्रोग्रामिंग भाषा के लिए एक हल्की लेकिन शक्तिशाली ORM (Object-Relational Mapping) लाइब्रेरी है। यह डेटाबेस के साथ काम करने के लिए दो मुख्य दृष्टिकोण प्रदान करती है: DSL (Domain Specific Language) और DAO (Data Access Objects)।

Exposed की आवश्यकता क्यों है?

  • टाइप-सेफ्टी: कच्चे SQL क्वेरी के विपरीत, Exposed Kotlin के टाइप किए गए कंस्ट्रक्शन का उपयोग करता है, जिससे कंपाइल टाइम पर ही एरर पकड़ी जा सकती हैं।
  • संक्षिप्तता: Exposed पर कोड समतुल्य SQL क्वेरी या JPA के साथ Java कोड की तुलना में काफी छोटा और पढ़ने में आसान होता है।
  • प्रदर्शन: Exposed रिफ्लेक्शन और प्रॉक्सी ऑब्जेक्ट (जैसे Hibernate) का उपयोग नहीं करता, जिससे यह बहुत तेज़ और पूर्वानुमानित होता है।
  • लचीलापन: आप एक ही प्रोजेक्ट में जटिल क्वेरी के लिए DSL और सरल CRUD ऑपरेशन के लिए DAO के बीच आसानी से स्विच कर सकते हैं।
  • कई डेटाबेस का समर्थन: PostgreSQL, MySQL, MariaDB, SQLite, H2, Oracle, SQL Server।

Exposed की स्थापना (इंस्टॉलेशन)

Exposed को Gradle या Maven बिल्ड सिस्टम के माध्यम से स्थापित किया जाता है। अपने build.gradle.kts में निम्नलिखित डिपेंडेंसी जोड़ें:

dependencies {
    // मुख्य लाइब्रेरी
    implementation("org.jetbrains.exposed:exposed-core:0.44.1")
    // क्वेरी के लिए DSL
    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")
    // आपके डेटाबेस के लिए JDBC ड्राइवर (PostgreSQL का उदाहरण)
    implementation("org.postgresql:postgresql:42.7.1")
    // HikariCP कनेक्शन पूल (अनुशंसित)
    implementation("com.zaxxer:HikariCP:5.1.0")
    // SQL लॉगिंग (वैकल्पिक)
    implementation("ch.qos.logback:logback-classic:1.4.14")
}

Maven (pom.xml) के लिए:

<dependency>
    <groupId>org.jetbrains.exposed</groupId>
    <artifactId>exposed-core</artifactId>
    <version>0.44.1</version>
</dependency>

त्वरित शुरुआत: कोड उदाहरण

चलिए कार्य प्रबंधन (ToDo) के लिए एक सरल एप्लिकेशन बनाते हैं:

import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import java.time.LocalDateTime

// 1. टेबल को परिभाषित करें
object Tasks : Table() {
    val id = integer("id").autoIncrement()
    val title = varchar("title", 255)
    val description = text("description").nullable()
    val isCompleted = bool("is_completed").default(false)
    val createdAt = datetime("created_at").default(LocalDateTime.now())

    override val primaryKey = PrimaryKey(id)
}

// 2. सुविधा के लिए Data class
data class Task(
    val id: Int,
    val title: String,
    val description: String?,
    val isCompleted: Boolean,
    val createdAt: LocalDateTime
)

fun main() {
    // 3. डेटाबेस से कनेक्ट करें (उदाहरण के लिए मेमोरी में H2)
    Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver = "org.h2.Driver")

    transaction {
        // 4. टेबल बनाएं
        SchemaUtils.create(Tasks)

        // 5. डेटा डालें
        val insertId = Tasks.insert {
            it[title] = "Exposed सीखें"
            it[description] = "डॉक्यूमेंटेशन पढ़ें और उदाहरण लिखें"
        } get Tasks.id

        println("ID के साथ कार्य डाला गया: $insertId")

        // 6. सभी कार्य चुनें
        val allTasks = Tasks.selectAll().map { row ->
            Task(
                id = row[Tasks.id],
                title = row[Tasks.title],
                description = row[Tasks.description],
                isCompleted = row[Tasks.isCompleted],
                createdAt = row[Tasks.createdAt]
            )
        }
        println("सभी कार्य: $allTasks")

        // 7. कार्य अपडेट करें
        Tasks.update({ Tasks.id eq 1 }) {
            it[isCompleted] = true
        }

        // 8. कार्य हटाएं                    

अनुशंसाएँ