persistence.js 是一个异步的 JavaScript 对象数据库映射(ORM)框架。拥有数据库无关的独立抽象层,可轻松支持新的数据库。该软件最开始是为浏览器设计的,利用 HTML5 的 WebSQL 数据库。而后 persistence.js 被扩展以便支持各种 JavaScript 环境,包括服务器端的 JavaScript 环境,如 node.js 。
支持的浏览器
- Modern webkit browsers (Google Chrome and Safari)
- Firefox (through Google Gears)
- Opera
- Android browser (tested on 1.6 and 2.x)
- iPhone browser (iPhone OS 3+)
- Palm WebOS (tested on 1.4.0)
- Other browsers supporting
localStorage
(e.g. Firefox)
使用
引入 persistence.js
<script type="text/javascript" src="js/persistence.js"></script> <script type="text/javascript" src="js/persistence.store.sql.js"></script> <script type="text/javascript" src="js/persistence.store.websql.js"></script> <script type="text/javascript" src="js/persistence.store.memory.js"></script>
persistence.js 将其核心模块分割成各个较小的 JavaScript 文件,有效的保证了高性能的加载,用户仅需要在用到某个功能模块时才引入相应的 JavaScript 文件。这里我们用到了 persistence.js,persistence.store.sql.js 和 persistence.store.websql.js,这三个文件是使用 Web SQL 必需的。如果用户想以在内存中临时保存数据的方式作为浏览器不支持 Web SQL API 时的替代,那么也可以将 persistence.store.memory.js 引入进来。
配置
在编写 ORM 的 JavaScript 代码前,我们需要告知 persistence.js 我们将会创建什么数据库或者连接向哪个已有的数据库。如清单 7 所示。而这段代码正对应了在清单 1 中描述的连接一个数据库的代码。由此可见 persistence.js 简化了大量的 JavaScript 代码。
配置 persistence 全局变量
if (window.openDatabase) { persistence.store.websql.config(persistence, ‘testdb‘, ‘My SQLite database‘, 5 * 1024 * 1024); } else { persistence.store.memory.config(persistence); }
persistence 是引入 persistence.js 后的一个全局变量。当前浏览器如果有 openDatabase API 存在,那么表示是支持 Web SQL 的,我们可以直接指定即将创建的数据库信息,如果没有,那么将使用另一种方式做存储。
创建表
数据库创建好后,我们接着就来看看如何用面向对象的方式创建一个表,清单 8 完成的功能将会如清单 2 所示的 SQL 语句。
persistence.js 创建对象
var User = persistence.define(‘User‘, { name: "TEXT", age: "INTEGER" }); persistence.schemaSync();
非常简洁的定义了一个 User 对象,再通过 schemaSync() 方法,数据库中对应的一个表就创建完成了。以后用户如果想对 User 表的数据做一些操作,直接从 User 对象调用相关的 API 就可以。
persistence.js 对基本的 SQLite 数据类型,如 NULL,INTEGER,REAL,TEXT,BLOB,是完全支持的,而且还有一些扩展类型也可以支持,如 INT,BOOL,DATE,JSON。
插入和删除数据
对 User 表插入一条记录就是直接将一个 User 对象保存起来,并调用 flush() 方法在持久化,如清单 9。
persistence.js 插入数据
var mark = new User({name: "Mark", age: 60}); persistence.add(mark); persistence.flush();
删除一条记录就是直接将一个 User 对象删除,如清单 10。
persistence.js 删除数据
persistence.remove(mark); persistence.flush();
github主页:https://github.com/zefhemel/persistencejs,官网http://persistencejs.org。