日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

ODB——基于c++的ORM映射框架尝试(使用)

發布時間:2023/12/15 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ODB——基于c++的ORM映射框架尝试(使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2、使用
首先,需要定義一個對象,用來和數據庫字段對應:
[cce lang=”cpp”]
#ifndef VOLUME_H
#define VOLUME_H

#include <string>
#include <odb/core.hxx>

#pragma db object
class Volume
{
public:
Volume(const std::string &name, const std::string &location, const std::string &cover_path, int trackCount)
: _name(name), _location(location), _cover_path(cover_path), _trackerCount(trackCount)
{}

unsigned long long id() { return _id; }
void id(unsigned long long i) { _id = i;}

const std::string &name() {return _name;}
void name(const std::string &n) {_name = n;}

const std::string &location() {return _location;}
void location(const std::string &l) {_location = l;}

const std::string &cover_path() {return _cover_path;}
void cover_path(const std::string &c) {_cover_path = c;}

int trackCount() {return _trackerCount;}
void trackCount(int c) {_trackerCount = c;}

private:
friend class odb::access;
Volume () {}

#pragma db id auto
unsigned long long _id;
std::string _name;
std::string _location;
std::string _cover_path;
int _trackerCount;
};
[/cce]
首先是引入core.hxx這個頭文件,包含access這個類。在類上面添加#pragma db object宏,標識這是個數據庫對象。在主鍵上增加宏#pragma db id auto,標識這個是主鍵,并且自增。這兩個宏都是提供信息給odb,用來生成最終c++代碼的。因為數據庫對應字段都是私有類型,所以需要將odb::access聲明為友元。

為了方便,這里連接數據庫都使用sqlite,因此,需要引入sqlite相關的包。創建數據庫連接(對sqlite來說,就是打開數據庫文件):
[cce lang=”cpp”]
std::shared_ptr<odb::database> sqliteDB(new odb::sqlite::database("mycppweb.db", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE));
[/cce]
注:這里需要引入頭文件odb/sqlite/database.hxx,創建數據庫連接的第一個參數(只針對sqlite)是數據庫文件名,后面是打開的flag,這里主要是提示如果數據庫文件不存在,默認創建。另外,這里使用了c++11的shared_ptr,g++需要添加參數-std=c++0x

插入對象:
[cce lang=”cpp”]
{
odb::transaction t(db->begin());
volumeId = db->persist(volume);
t.commit();
}
[/cce]
插入的時候,使用了事務,需要引入odb/transaction.hxx頭文件,并且盡量減少transaction的生命周期。

通過odb命令生成對應的代碼:
[cce lang=”bash”]
odb –database sqlite \
–hxx-suffix .hpp –ixx-suffix .ipp –cxx-suffix .cpp \
–output-dir /tmp \
–generate-query –generate-schema –schema-format embedded volume.h
[/cce]
這里指定輸出的數據庫是sqlite,創建schema的語句嵌入到代碼里面。
執行之后,會生成volume-odb.hpp、volume-odb.cpp和volume-odb.ipp三個文件。查看volume-odb.cpp就會發現,里面包含了volume.h中指定的類和數據庫表的關系。如果希望通過代碼來創建數據庫(貌似需要自己來判斷是否已經存在,否則第二次運行又會重新創建表,導致數據丟失),可以通過:
[cce lang=”cpp”]
{
odb::transaction t (sqliteDB->begin ());
odb::schema_catalog::create_schema (*sqliteDB);
t.commit ();
}
[/cce]

odb的查詢,還沒有去嘗試,具體文檔在http://www.codesynthesis.com/products/odb/doc/manual.xhtml


轉載自:https://coolex.info/blog/376.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的ODB——基于c++的ORM映射框架尝试(使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。