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

摘要: 2、使用 首先,需要定义一个对象,用来和数据库字段对应: [cce lang=”cpp”] #ifndef VOLUME_H #define VOLUME_H #include #include #pragma db object cl

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

时间: 2024-10-08 18:59:14

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

自定义注解实现简单的orm映射框架

package com.mj; import javax.xml.bind.Element; import java.lang.annotation.*; import java.lang.reflect.Field; public class Test01 { @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface table{ String value(); } @Target(value

基于.NET平台常用的框架整理

自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的KV数据库. 它的出现很大程度补偿了Mem

基于.NET平台常用的框架整理【转】

转:http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用

基于.NET平台常用的框架和开源程序整理

自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中 也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的KV数据库. 它的出现很大程度补偿了Me

基于.net平台常用的框架整理(转载)

转自:http://www.cnblogs.com/hgmyz/p/5313983.html#!comments 基于.NET平台常用的框架整理 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memc

基于.NET平台常用的框架整理【藏】

来自:天使不哭 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的KV数据库. 它的出现很大

( 转)基于.NET平台常用的框架整理

自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的KV数据库. 它的出现很大程度补偿了Mem

基于.NET平台常用的框架整理 [转]

基于.NET平台常用的框架整理[转] 原文地址:http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:

基于.NET平台常用的框架整理[转载]

自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的KV数据库. 它的出现很大程度补偿了Mem