c++ - 将类映射到 mySql 表,而不在 cpp 中使用 ODB 或其他框架

标签 c++ mysql orm

我阅读了很多有关 ODB 框架的内容,但遗憾的是由于许可证问题无法实现它。

我想要一个代表表的类。当我的应用程序启动时,我想调用此函数:Init() -> 它将连接到数据库,以及另一个函数:createTables() -> 它将创建表。

有没有一种方法可以以某种方式“注册”到一个类,该类将包括我所有应该映射到 mySql 表的类?

我的想法是创建该类,并在其构造函数中将参数传递给另一个类,该类稍后将创建所有表。

例如:

CalssA_Table
{
 String name;
 Int age;
}

c'tor
{
   RegistrationClass.AddNewTableToCreate("CalssA_Table","String","Int");
}

有人可以建议吗?是个好主意吗?有更好的吗? 其他实现方式?

谢谢!

最佳答案

您可以在静态初始化时使用全局信号并注册数据库初始化函数。这样,您就可以在连接到数据库后通过发出信号来调用这些函数。

/// Static initialization of classes.
template <typename Class>
class Initializer
{
    public:
    /// Call the static member function Class::initialize()
    Initializer() {
        Class::initialize();
    }
};

// A 'boost signal' or a 'sigc++ signal'  or, ...
Signal& signal_database_initialize() {
    static Signal result;
    return result;
}

// A class interacting with a database
class Table
{
    private:
    friend class Initializer<Table>;
    static void initialize();
};

// In a translation unit
void database_initialize_table() {
    // create tables
}

Initializer<Table> table_initializer;   
void Table::initialize() {
    signal_database_initialize().connect(&database_initialize_table);
}

// Invoke initialization at runtime:
int main()  {
    // Connect to a database
    // ...

    // Initialize database tables:
    signal_database_initialize().emit();
}

注意:此处未指定信号类型。这取决于您选择的库。

关于c++ - 将类映射到 mySql 表,而不在 cpp 中使用 ODB 或其他框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382974/

相关文章:

java - 从 Visual Studio 外部创建 JVM 崩溃

c++ - 关于 SIGNAL/SLOT qt4 的问题

mysql - MySQL中的批量替换字符串

mysql - 似乎无法使用 NHibernate 从 MySQL DB 中获取我的数据

Google 云 Sql 上大于 1 TB 的 MySQL 表

nhibernate - Entity Framework 和 NHibernate - 缓存仍然是服务层的职责吗?

c++ - 为什么我的线程不在后台运行?

c++ - NodeJS源代码找不到set_immediate_callback_function定义

spring-mvc - 即使配置了 log4j.xml,也无法启用 spring orm/事务日志记录

java - OpenJPA 映射工具 MetaDataException