当前位置: 首页 > news >正文

网站制作设计机构贵阳企业网站建设

网站制作设计机构,贵阳企业网站建设,徐州网站开发设计公司电话,怎么建设电子商城网站目录 参考正文运行时模式检查更新和插入 参考 https://drift.simonbinder.eu/dart_api/schema_inspection/ 正文运行时模式检查 得益于 Drift 生成的类型安全表类,在 Dart 中编写 SQL 查询既简单又安全。然而,这些查询通常针对特定的表。虽然 Drift 支…

目录

  • 参考
  • 正文运行时模式检查
    • 更新和插入

参考

https://drift.simonbinder.eu/dart_api/schema_inspection/

正文运行时模式检查

得益于 Drift 生成的类型安全表类,在 Dart 中编写 SQL 查询既简单又安全。然而,这些查询通常针对特定的表。虽然 Drift 支持表的继承,但有时通过反射访问表会更容易。幸运的是,Drift 生成的代码实现了可用于执行此操作的接口。

由于大多数漂移用户并不需要这个主题,因此本页面主要提供一些启发性的示例以及相关漂移类文档的链接。例如,您可能有多个包含同一id列的独立表。并且您可能希望按列筛选行id。当针对单个表(例如入门Todos页面中所示的表)编写此查询时,操作非常简单:

个人理解:其实就是针对数据库操作相关代码进行二次封装;

Selectable<Todo> findTodoEntryById(int id) {return select(todos)..where((row) => row.id.equals(id));
}

但是,假设我们想将此查询推广到每个数据库表,该怎么办呢?以下代码片段展示了如何实现这一点(请注意,代码片段中的链接直接指向相关文档):

extension FindById<Table extends HasResultSet, Row>on ResultSetImplementation<Table, Row> {Selectable<Row> findById(int id) {return select()..where((row) {final idColumn = columnsByName['id'];if (idColumn == null) {throw ArgumentError.value(this, 'this', 'Must be a table with an id column');}if (idColumn.type != DriftSqlType.int) {throw ArgumentError('Column `id` is not an integer');}return idColumn.equals(id);});}
}

由于这比仅适用于单个表的查询要复杂得多,让我们详细看看每一行有趣的内容:

  • FindByIdResultSetImplementation的扩展。此类是 Drift
    生成的每个表或视图的超类。它定义了一些有用的方法来检查模式,或将Map表示数据库行的原始数据转换为生成的数据类。
  • ResultSetImplementation使用两个类型参数进行实例化:原始表类和生成的行类。例如,如果您定义了一个表class
    Todos extends Table
    ,drift 会生成一个继承自该表的类Todos,同时实现该类。
  • ResultSetImplementation<Todos, Todo>(其中,driftTodo是生成的数据类)。
  • ResultSetImplementation有两个子类:TableInfo和ViewInfo,分别混合到生成的表和视图类中。
  • HasResultSetTable是和的超类View,这两个类用于在drift 中声明表和视图。
  • **Selectable表示一个查询,您可以使用get()、watch()getSingle()等方法watchSingle()**来运行该查询。
  • select()所使用的扩展可findById用于启动选择语句,而无需引用数据库类 - 您所需要的只是表实例。
  • 在 SQL 中,我们可以columnsByName通过名称查找列。这里,我们期望int存在一个列。
  • GeneratedColumn类表示数据库中的一列。可以从列实例中读取诸如列约束、类型或默认值等信息。
  • 具体来说,我们使用它来断言该表确实有一个IntColumn名为的id

更新和插入

同样的方法也适用于构造更新、删除和插入语句(尽管 由于视图是只读的,这些语句需要TableInfo而不是ResultSetImplementationInsertable )。此外,更新和插入分别使用一个对象来表示更新或插入列的部分行。对于已知表,可以使用生成的类型化Companion对象来实现。但这也可以通过模式自省来实现,这要归功于RawValuesInsertable,它可以用作Insertable由列名到值的映射支持的泛型。

此示例在前一个示例的基础上,title根据id列的过滤器来更新通用表的列:

extension UpdateTitle on DatabaseConnectionUser {Future<Row?> updateTitle<T extends TableInfo<Table, Row>, Row>(T table, int id, String newTitle) async {final columnsByName = table.columnsByName;final stmt = update(table)..where((tbl) {final idColumn = columnsByName['id'];if (idColumn == null) {throw ArgumentError.value(this, 'this', 'Must be a table with an id column');}if (idColumn.type != DriftSqlType.int) {throw ArgumentError('Column `id` is not an integer');}return idColumn.equals(id);});final rows = await stmt.writeReturning(RawValuesInsertable({'title': Variable<String>(newTitle),}));return rows.singleOrNull;}
}

在数据库或数据库访问器类中,可以像这样调用该方法:

Future<Todo?> updateTodoTitle(int id, String newTitle) {return updateTitle(todos, id, newTitle);
}

具体详细使用方法,可以去学习源码

http://www.dtcms.com/a/457975.html

相关文章:

  • wordpress快速仿站教程建立一个网站需要哪些
  • Linux 进程分身术:fork() 函数的深度解析
  • 小程序建站公司app开发需要多少费用
  • 贪心算法详解:从入门到精通(C++实现)
  • 颜群JVM【04】助记符
  • 网站优化 推广重庆教育建设集团有限公司网站
  • Manjaro 系统下 PCManFM 挂载 NTFS 分区报错:从踩坑到彻底解决
  • 单片机使用串口(usart) , 封装( print )函数 .
  • 外贸网站建设和优化做网站要不要学ps
  • 福建省建设厅网站 企业三网一体网站建设
  • 湖南做网站大连凯杰建设有限公司网站
  • 吴恩达机器学习课程(PyTorch适配)学习笔记:2.4 激活函数与多类别处理
  • 【PAG】PAG简介
  • hutool交并集
  • 赣州建设公司网站权威网站有哪些
  • Python制作12306查票工具:从零构建铁路购票信息查询系统
  • 《道德经》第十三章
  • 东莞做网站网络公司官网建设的重要性
  • Docker 容器操作
  • 小说网站建设源码潜江网络
  • 做网页游戏网站html网页设计大赛作品
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段应用练习(8):语法 +考え方21+2022年7月N1
  • 维基框架 (Wiki Framework) v1.1.2 | 企业级微服务开发框架
  • 做的网站提示不安全个人网站的名字
  • 用wordpress建站会不会显得水平差喜迎二十大作文
  • 我已经把 Cookie 的值从 zhangfei 改成了 guanyu,为什么再次获取时还是 zhangfei?”
  • C++回调函数的设计以及调用者应注意的问题
  • 上海推广网站公司网站搭建什么意思
  • 美团-Mtgsig4.0.4逆向-Js逆向
  • 巩义推广网站哪家好制作网站设计的技术有