QString sql = "select from user where id = 1";
然后再执行 SQL 查询,随后就可以获取记录以及其中的字段值了:QSqlQuery query;query.exec(sql);if (query.next()) { // 获取记录 QSqlRecord record = query.record(); if (!record.isEmpty()) { // 获取字段值 QString name = record.value("name").toString(); int age = record.value("age").toInt(); qDebug() << "name:" << name << "age:" << age; }}
如果改为 ORM(例如:QxOrm),就会变为这样:typedef QSharedPointer<User> UserPtr;UserPtr user(new User());user->id = 1;QSqlError daoError = qx::dao::fetch_by_id(user);if (daoError.type() == QSqlError::NoError) { qDebug() << "name:" << user->name << "age:" << user->age;}
比较之后你会发现,ORM 使用对象封装了数据库操作,因此不必再和 SQL 语句打交道了只需要与数据对象直接交互即可,而无需关心底层数据库ORM 的优缺点无论是何种技术,在使用时都应该权衡一番ORM 也不例外,一起来看看它的优缺点吧优点:ORM 提供了一种面向对象的查询语言,这使得开发者可以专注于对象模型,而不必关心数据库结构或 SQL 语义ORM 提供了大量的服务,开发者只需要关注业务逻辑,而不是重复的 CRUD(Create、Read、Update、Delete)操作,这可以减少大量的代码ORM 将迫使你使用 MVC 风格,这通常会使代码更加简洁、更容易理解ORM 有现成的工具,很多功能可以自动完成,比如预处理、事务等ORM 对数据库进行了抽象,因此从一种数据库切换到另一种(例如:从 MySQL 到 PostgreSQL)会很容易缺点:无论是什么 ORM 框架,都需要花费相当大的精力去学习和理解ORM 抽象掉了数据库层,开发者无法了解底层数据库(和 SQL)的相关操作对于复杂的查询,ORM 要么难以实现,要么性能不如原生的 SQL主流的 ORM 框架目前为止,C++ 中主流的 ORM 框架有以下几个:LiteSQL:https://litesql.org/ODB:https://www.codesynthesis.com/products/odb/QxOrm:https://www.qxorm.com/qxorm_en/home.htmlWt::Dbo:https://www.webtoolkit.eu/wt/doc/tutorial/dbo.html为了更清楚地了解它们的现状,有必要从不同角度对比一番,像许可协议、所支持的数据库等:ORM 各个框架其中,LiteSQL 和 ODB 不依赖于特定的框架,而 QxOrm 依赖于 Qt,Wt::Dbo 依赖于 Wt综合考虑,如果是纯 C++ 开发,可以选择使用 ODB它拥有大量的用户群体,(相比 LiteSQL)技术支持好,(相比 QxOrm)编译时间短,(相比 Wt::Dbo)提供了更多的特性,更重要的是它易于使用,并且提供了很全面的文档当然,如果是 Qt 开发,也可以选择使用 QxOrm它几乎支持所有的数据库,并且也有良好的文档除此之外,它还提供了一个图形编辑器 - QxEntityEditor,可以很方便地以图形方式来管理数据模型还有些什么ORM 并不是 SQL/DB 技能的替代者,而是对它的补充,这两者可以说是相辅相成的
就个人而言,我更喜欢使用 ORM,而不是编写 SQL 代码因为后者很难维护,而 ORM 却能以更易读的格式提供所需的数据另一方面,当在小型团队中工作时,一般我们充当的都是“全栈工程师”的角色,很少有专门的数据库专家做支持,这时 ORM 能极大地简化数据层的工作当然了,上述观点有一定的偏见,最终如何选择还是要取决于自己无论如何,我还是强烈建议大家要理解 SQL 的原则,并掌握其中的一些常见操作倘若你还没有使用过 ORM,建议尝试一下,看看它究竟是如何工作的,我相信你会喜欢上它的作者:一去、二三里,爱编程、爱分享、爱生活
欢迎大家关注,更多优质原创内容敬请期待
本文出自头条号【高效程序员】,VX 公众号同名
(图片来源网络,侵删)
0 评论