为什么要用 SQLDelight 和 SQLBrite

作者: rain 分类: 移动 发布时间: 2016-05-21 23:43 6 条评论

SQLDelightSqlBriteSquare 公司推出的一个 Android 平台数据库解决方案,相信自从 N 年以前 Hibernate 横空出世以后,很多 Java 开发者都选择使用 ORM 而抛弃了手写 SQL 语句。 但是 Square 的同学认为, ORM 其实并不是一个优秀的框架。很多平台的 ORM 实现都有性能和内存的问题。所以他们搞了一个 SqlDelight 框架反其道而行之,从 SQL 语句来生成 JAVA 模型代码。 这样的好处是,所有 SQL 语句都位于同一个位置,通过查看 SQL 语句可以清楚的了解需要实现的功能和数据库的结构。

SQL 语言被证明是关系数据库中最佳的描述语言,本身就很强大。SqlDelight 添加了对 SQL 语句的编译时验证、表名字和列名字的代码自动完成功能。让编写 SQL 语句更加快捷。在编译的时候,根据 SQL 语句生成 Java 模型接口和 builder 来把数据行和 Java 对象实现转换。虽然这个框架还很年轻,但是通过这个框架目前的功能你就可以发现,SqlDelight 不会变成一个 ORM 框架。并且不会做很重的功能(比如数据懒加载、缓存 、级联删除 等 ORM 框架内常见的功能) 。

而 SqlBrite 更加简单了,只是让你方便在 RxJava 中使用 Sql 操作而已,并且额外添加了对数据库表数据更新通知的机制。只是一个 SQLiteOpenHelper 的轻量级封装,并不关心你的对象是如何实现的,也不关心你的数据库。同样,SQLiteOpenHelper 也不支持对象映射和类型安全的查询,通常这些功能并不比直接使用SQL 语句更加方便。虽然在 Java 中操作 SQL 语言有一个比较好的框架 — jOOQ 。但是在 Android 中使用 jOOQ 就是杀鸡用牛刀了!

这两个框架的功能都很轻量级。SqlDelight 大部分代码都是编译时用的,真正的运行时代码(包含在你应用中的代码)只有10几行代码几个接口而已。

JakeWharton 同学也说了, 这两个框架不会实现下面这些功能:
– 不会成为 Java 语音中功能不够全面的数据库查询 API
– 不会实现把外键映射为 Java 对象集合(关系映射)
– 不会有泛字符类型(string-ly typed)的表名字和列名字的引用
– 不会有一个基类需要你的数据库操作对象来继承该类
– 不会在 Java 中定义数据库表,比如通过注解、或者继承一个类等
– 不会自动创建数据表和迁移数据表
– 不会对 Sql 查询和 Java 对象做线程限制
– 不会返回可变的对象,你修改该对象的值,然后调用 save 函数就可以把更新的值保存到数据库了。

总之, Square 那帮牛人认为,既然操作 Sqlite 数据库,没有比直接使用 SQL 语句更好的了。什么 ORM 框架之类的东西,用着用着你就发现你有稍微复杂一点的功能就无法简单的实现了,最终不得已还需要自己动手编写 SQL 语句来实现。既然如此,何必当初呢?

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=994

Ɣ回顶部