删除数据

QtDao删除数据可以按条件删除,也可以按实体对象删除。使用函数_delete<E>返回一个DeleteBuilder<E>对象,再调用build()函数创建Delete<E>对象进行删除数据操作:

template<typename E>
Delete<E> dao::_delete<E>().build()

条件删除

按条件删除记录时,对DeleteBuilder<E>使用filter函数设置条件。使用如下:

User::Fields field;
dao::_delete<User>()
    .filter(field.name == "Alice")
    .build().deleteBy();

等同于使用如下sql语句:

delete from User where name = 'Alice'

实体对象删除

按实体对象删除记录时,直接将对象传入update函数即可:

User::Fields field;
auto user = dao::_select<User>().filter(field.name == "Alice").build().unique();

dao::_delete<User>().build().deleteBy(user);

注意:按实体对象删除时内部将自动提取表primary key字段作为条件,因此,使用实体对象删除方法时,必须确保操作的表设置了primary key字段。

批量删除

使用deleteBatch()函数进行批量删除。对于使用条件删除,对field成员使用QList<T>列表即可:

auto userNames = QStringList() << "Alice" << "Bob";

User::Fields field;
dao::_delete<User>()
    .filter(field.name == userNames)
    .build().deleteBatch();

对于使用实体对象删除,传入对象列表即可:

User::Fields field;
UserList users = dao::_select<User>().filter(field.age < 18).build().list();

dao::_delete<User>().build().deleteBatch(users);

清空数据

通常情况下,不设置filter条件就能实现对表的清空:

dao::_delete<User>().build().deleteBy();

但使用该方法不能重置自增长字段,使用_truncate()函数可以清空表数据并重置自增字段:

dao::_truncate<User>();

results matching ""

    No results matching ""