1. mysql中是有默认值的, odb中也有

    // file      : self/person.hxx
    // copyright : not copyrighted - public domain#ifndef PERSON_HXX
    #define PERSON_HXX
    #include <string>
    #include <cstddef> #include <odb/core.hxx>
    #include <odb/nullable.hxx>#pragma db object
    class person
    {
    public:person(const std::string& first): first_(first){}const odb::nullable<std::string>& first() const { return first_; }private:friend class odb::access;                       person() {}                                     #pragma db id auto                              unsigned long id_;odb::nullable<std::string> first_;
    };#endif // PERSON_HXX

    给类型std::string 加上 odb::nullable<std::string> 那么在建表的时候就会把这种类型默认值设置为NULL如图

  2. 查询相关的详细说明
    2.1  大前提先把结构定下来

    // file      : query/person.hxx
    // copyright : not copyrighted - public domain#ifndef PERSON_HXX
    #define PERSON_HXX#include <string>#include <odb/core.hxx>
    #include <odb/nullable.hxx>#pragma db object
    class person
    {
    public:person (const std::string& first,const std::string& last,unsigned short age): first_ (first), last_ (last), age_ (age){}person (const std::string& first,const std::string& middle,const std::string& last,unsigned short age): first_ (first), middle_ (middle), last_ (last), age_ (age){}const std::string&first () const{return first_;}const odb::nullable<std::string>&middle () const{return middle_;}const std::string&last () const{return last_;}unsigned shortage () const{return age_;}private:friend class odb::access;person () {}#pragma db id autounsigned long id_;std::string first_;odb::nullable<std::string> middle_;std::string last_;unsigned short age_;
    };#endif // PERSON_HXX
    

    然后执行odb.exe生成需要的文件, 数据库最终如图显示

    2.2  查询岁数小于30岁的用户

    transaction t (db->begin ());
    result r (db->query<person> (query::age < 30));
    for (result::iterator i (r.begin ()); i != r.end (); ++i)
    {cout << i->first () << " " << i->last () << " " << i->age () << endl;
    }
    cout << endl;
    t.commit ();

    这里  query::age<30 就是条件,   db->query<person> 则是相当于select * from table where 条件 返回的是一个结果集 被result r接收, 使用方法类似于迭代器
    2.3 当只有一个元素时使用 query_one 貌似好像是性能比较好吧

    transaction t (db->begin ());auto_ptr<person> p (db->query_one<person> (query::age == 21));
    if (p.get () != 0)
    {print (*p);cout << endl;
    }
    t.commit ();

    这里使用query_one  表示数据库只有一个符合这种条件的, 否则的话就会直接宕机
    2.4 如何使用&& || ! 进行查询

    transaction t (db->begin ());result r (db->query<person> ((query::first == "John" || query::first == "Jane") &&!(query::last != "Doe" || query::age > 30)));print (r);
    t.commit ();

    类似于2.2的用法这里就不多说了
    2.5如何使用引用参数绑定的查询

    transaction t (db->begin ());unsigned short lower, upper;query q (query::age >= query::_ref (lower) &&query::age < query::_ref (upper));for (unsigned short band (0); band < 10; ++band)
    {lower = band * 10;upper = lower + 10;result r (db->query<person> (q));if (!r.empty ()){cout << lower << '-' << (upper - 1) << ':' << endl;print (r);}
    }
    t.commit ();

    query q(query::age >= query::_ref(lower) && query::age < query::_ref(upper))  这里lower, upper都是把自己和odb里的某个变量绑定起来了,  当值改变的时候  这个条件也就跟着变了, 然后查询到的数据就不同了。
    2.6 通过 in()查询数据

    transaction t (db->begin ());result r (b->query<person> (query::last.in ("Smith", "Johnson", "Jockson")));
    print (r);
    t.commit ();

    query::last.in("Smith", "Johnson", "Jockson") 这个表示找表中元素last是  Smith  or  Johnson  or  Jockson 的元素
    2.7 通过 in_range()查询数据

    vector<string> names;names.push_back("Smith");
    names.push_back("Johnson");
    names.push_back("Jockson");transaction t(db->begin());result r(db->query<person>(query::last.in_range(names.begin(), names.end())));print(r);t.commit();

    query::last.in_range(names.begin(), names.end()) 表示只要last是容器names中的元素就是要查询的数据
    2.8 查询不是NULL的元素

    transaction t(db->begin());
    result r(db->query<person>(query::middle.is_not_null()));
    print(r);
    t.commit();

    is_not_null() 就是条件不为null, query::middle就表示元素middle, 所以这个条件就是元素middle不为null的所有元素

ODB 入门介绍(二)相关推荐

  1. C++ ORM ODB 入门介绍(一)

    2019独角兽企业重金招聘Python工程师标准>>> :::欢迎广大oscer拍砖和交流. C++的语言特性决定了在C++中的ORM框架不可能像Java,C#那没有那么灵活. C+ ...

  2. Gtest入门介绍(二)

    测试夹具:对多个测试使用相同的数据配置 如果您发现自己编写了两个或多个对相似数据进行操作的测试,您可以使用测试夹具.这允许您为多个不同的测试重用相同的对象配置.要创建夹具:从 派生一个类::testi ...

  3. 《C#零基础入门之百识百例》(五十二)封装介绍 -- 二维多项式求值

    C#零基础入门 面向对象 -- 封装介绍 -- 二维多项式求值 前言 一,封装概念 二,封装属性 三,实例练习 -- 二维多项式求值 3.1 题目描述 3.2 问题分析 3.3 参考代码 前言 本文属 ...

  4. Java JPA快速入门介绍

    JPA快速入门介绍 一:什么是JPA JPA的英文全称是Java PersistenceAPI, 目的是给Java开发者提供对象关系映射工具用于在 Java应用程序开发中来管理关系数据(RDBMS). ...

  5. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

  6. 独家 | 集成学习入门介绍

    作者:Jason Brownlee 翻译:wwl 校对:王琦 本文约3300字,建议阅读8分钟. 本文介绍了我们在生活中的许多决定包括了其他人的意见,由于群体的智慧,有的时候群体的决策优于个体.在机器 ...

  7. SpringBoot入门(二)——起步依赖

    本文来自网易云社区 在前一篇我们通过简单几步操作就生成了一个可以直接运行的Web程序,这是因为SpringBoot代替我们做了许多工作,概括来讲可以分为起步依赖和自动配置.这一篇先来看看起步依赖. 项 ...

  8. ECC加密算法入门介绍

    作者  : ZMWorm[CCG]   E-Mail: zmworm@sohu.com   主页  : Http://ZMWorm.Yeah.Net/ 前言 同RSA(Ron Rivest,Adi S ...

  9. 互联网协议入门(二)【转】

    原文地址:点击前往 上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想. 这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的. ======== ...

最新文章

  1. 实践教程|如何用YOLOX训练自己的数据集?
  2. 超酷的Android 侧滑(双向滑动菜单)效果
  3. Window10设置护眼色
  4. 分布式系统概念 | 分布式理论:CAP、BASE
  5. axure实现复选框全选_jq简单的全选、反选和全不选效果
  6. Differential Geometry之第九章常平均曲率曲面
  7. 入门机器学习(六)--课后作业解析-logistics回归(python实现)
  8. Tiny Jpeg Decoder (JPEG解码程序) 源代码分析 1:解码文件头
  9. android定位坑简书,android webview 定位问题
  10. 为Linux发行版安装simsun.ttf
  11. NS3 Tracing System详解
  12. linux解锁文件夹
  13. PS制作水雾玻璃拍照效果、幻影视觉海报
  14. MYSQL5.7设置账号密码复杂度、密码有效期、账号锁定等策略
  15. 方舟生存进化服务器文件设置,方舟生存进化私人服务器设置教程[多图]
  16. 用户登录、注册(基于MyBatis+CSS+HTML+Selvet)
  17. 广东工业大学龙洞校区全国计算机,广东工业大学龙洞校区简介
  18. 李炎恢ECMAScript6 / ES6+(二)
  19. 什么是验厂什么是认证
  20. 2020年第四届中国 BIM (数字建造)经理高峰论坛即将在杭举办

热门文章

  1. mapbox基本使用
  2. Linux查看系统基本信息
  3. MySQL常用类型转换函数总结
  4. Validation工具类
  5. matlab进行道格拉斯筛选,用MATLAB计算柯布道格拉斯函数,需要计算程序,急!谢谢大神...
  6. 没有项目经验?软件测试简历项目经验怎么写...
  7. Oracle获取一周前,一个月前,一年前的日期
  8. 做需求分析师的几点困惑
  9. 上交计算机考研专业课,2018上交考研经验贴
  10. 【语音识别】作业1:语音特征提取