C++ के लिए ORM: लाइब्रेरीज़ की तुलना और उपयोग के उदाहरण

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

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

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

C++ के लिए ORM: तुलना और उपयोग के उदाहरण



C++ में आधुनिक डेवलपमेंट में, डेटाबेस के साथ काम करने के लिए अक्सर प्रदर्शन और सुविधा के बीच संतुलन की आवश्यकता होती है। समृद्ध ORM इकोसिस्टम (जैसे Python या Java) वाली भाषाओं के विपरीत, C++ उपकरणों का एक संकीर्ण लेकिन परिपक्व चयन प्रदान करता है। इस लेख में, हम चार लोकप्रिय लाइब्रेरीज़ की तुलना करेंगे: ODB, SQLiteCpp, Soci और sqlpp11। हम उनकी आर्किटेक्चर, सिंटैक्स, प्रदर्शन और कोड उदाहरणों पर विचार करेंगे।



1. ODB — औद्योगिक मानक

ODB C++ के लिए एक पूर्ण ORM-कंपाइलर है। यह हेडर फ़ाइलों से कोड उत्पन्न करता है, रिलेशनल डेटाबेस (MySQL, PostgreSQL, SQLite, Oracle) का समर्थन करता है और शक्तिशाली ऑब्जेक्ट-रिलेशनल मैपिंग प्रदान करता है।



मुख्य विशेषताएं:

  • प्रीकंपाइलर (odb) के माध्यम से स्वचालित कोड जनरेशन
  • इनहेरिटेंस, पॉलीमॉर्फिज्म, STL कंटेनर का समर्थन
  • लेज़ी लोडिंग, कैशिंग, ट्रांज़ैक्शन


उदाहरण: मॉडल और क्वेरी

// person.hxx#pragma once#include <string>#include <odb/core.hxx>

#pragma db objectclass Person {public: Person() = default; Person(const std::string& name, int age) : name_(name), age_(age) {}

const std::string& name() const { return name_; } int age() const { return age_; }

private: friend class odb::access; #pragma db id auto unsigned long id_; std::string name_; int age_;};


// main.cpp#include <odb/database.hxx>#include <odb/sqlite/database.hxx>#include "person.hxx"#include "person-odb.hxx"

int main() { auto db = std::make_shared<odb::sqlite::database>("test.db"); // इन्सर्शन Person p("Alice", 30); db->persist(p); // क्वेरी using query = odb::query<Person>; auto result = db->query<Person>(query::age > 25); for (const auto& person : result) { std::cout << person.name() << ""; } return 0;}


2. SQLiteCpp — हल्का रैपर

SQLiteCpp SQLite C API के ऊपर एक न्यूनतम C++ रैपर है। यह पूर्ण ORM नहीं है, लेकिन SQL क्वेरी के साथ काम करने के लिए एक सुविधाजनक RAII इंटरफ़ेस प्रदान करता है।



मुख्य विशेषताएं:

  • केवल SQLite3 पर निर्भरता
  • सरल API: Database, Statement, Transaction
  • प्रिपेयर्ड स्टेटमेंट और पैरामीटर बाइंडिंग का समर्थन


उदाहरण: इन्सर्शन और सेलेक्शन

#include <SQLiteCpp/Database.h>#include <iostream>

int main() { SQLite::Database db("test.db", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); // टेबल बनाना db.exec("CREATE TABLE IF NOT EXISTS person (id INTEGER PRIMARY KEY, name TEXT, age INT)"); // पैरामीटर के साथ इन्सर्शन SQLite::Statement insert(db, "INSERT INTO person (name, age) VALUES (?, ?)"); insert.bind(1, "Bob"); insert.bind(2, 25); insert.exec(); // सेलेक्शन SQLite::Statement query(db, "SELECT name, age FROM person WHERE age > ?"); query.bind(1, 20); while (query.executeStep()) { std::cout << query.getColumn(0).getText() << " - " << query.getColumn(1).getInt() << ""; } return 0;}


3. Soci — DB के लिए सार्वभौमिक पहुंच

Soci एक लाइब्रेरी है जो एक समान इंटरफ़ेस के माध्यम से विभिन्न डेटाबेस (MySQL, PostgreSQL, SQLite, Oracle) के साथ काम करने के लिए है। यह डायनामिक क्वेरी और ORM-जैसी मैपिंग दोनों का समर्थन करता है।



मुख्य विशेषताएं:

  • प्लगइन के माध्यम से कई बैकएंड का समर्थन
  • << ऑपरेटर और into() के माध्यम से पैरामीटर बाइंडिंग
  • ट्रांज़ैक्शन और बल्क-ऑपरेशन का समर्थन


उदाहरण: क्वेरी के साथ काम करना


                
    
    

अनुशंसाएँ