完整代码与课程:
https://edu.csdn.net/course/detail/40048
ORM(Object - Relational Mapping)对象 - 关系映射是一种编程技术思想,核心是在面向对象编程语言和关系型数据库之间建立一种映射关系。它允许开发者使用面向对象的方式来操作数据库,而不需要直接编写 SQL 语句。
在Qt中通过C++泛型编程技术实现ORM来操作SQLite数据库,通过低代码少SQL语句的ORM在各种QT项目中对数据库SQLite实现增删查改。
ORM操作接口:
cpp
template<class T>
class Dao
{
public:
bool saveModel(T &m,const QString& guid="")
{
return DatabaseEngine<T>(this->mDatabase).saveModel(m,guid);
}
T getModel(const QString& guid)
{
return DatabaseEngine<T>(this->mDatabase).getModel(guid);
}
bool deleteModel(const QString& guid)
{
return DatabaseEngine<T>(this->mDatabase).deleteModel(guid);
}
bool deleteModel(T& model)
{
return deleteModel(model.getGuid());
}
bool saveModelList(const QList<T> models)
{
return DatabaseEngine<T>(this->mDatabase).saveModelList(models);
}
bool clearModels()
{
return DatabaseEngine<T>(this->mDatabase).clearModels();
}
template <typename ... Args>
QList<T> getModelList(const QString& sql="",const Args &... args)
{
return DatabaseEngine<T>(this->mDatabase).getModelList(sql,args...);
}
template<typename ...Args>
bool execSQL(const QString& sql,const Args & ...args)
{
return DatabaseEngine<T>(this->mDatabase).execSQL(sql,args...);
}
template<typename ... Args>
ModelPage<T> getModelPage(int page_size=20,int page_index=1,const QString sql="",const Args &... args)
{
return DatabaseEngine<T>(this->mDatabase).getModelPage(sql,page_size,page_index,args...);
}
};
实践操作范例:
cpp
void saveUser()
{
User u;
u.setGuid("123");
u.setName("wension");
u.setGender("male");
u.setEnable(true);
UserDao().saveModel(u);
}
void getUser()
{
User u = UserDao().getModel("123");
qDebug() << u.display();
}
void deleteUser()
{
UserDao().deleteModel("123");
}
void addUserList()
{
QElapsedTimer Timer;
Timer.start();
QList<User> userList;
for(int i=0;i<100;i++)
{
User user;
user.setGuid(QString("%1").arg(i));
user.setName(QString("wension_%1").arg(i));
userList<<user;
}
UserDao().saveModelList(userList);
qint64 elapsedTime = Timer.elapsed();
qDebug() << "批处理 插入 经过的时间(毫秒):" << elapsedTime;
}