Skip to content
阝东户口米青 edited this page Apr 6, 2019 · 1 revision

websql-orm 框架,支持 typescript angular cordova chrome 的sqlite数据库读写。

开始

websql-orm 使用 TypeScript 语言编写,使用之前需在 tsconfig.json 添加装饰器配置项以启用装饰器特性.

{
    "compilerOptions": {
        "experimentalDecorators": true
    }
}

安装

npm install websql-orm@latest

提示:不要安装2.1.0之前的版本,2.1.0之前的版本是调试阶段的版本,无法使用

cordova plugin add cordova-sqlite-storage

若在在cordova项目中,则需要安装cordova插件兼容iOS

定义表

如何使用实体类定义一个表?

import { table, column, ColumnType, Table } from 'websql-orm';

@table("student_db")
export class student extends Table {
    @column(ColumnType.STRING | ColumnType.PRIMARY)
    id: string;
    @column(ColumnType.STRING)
    user_name: string;
}
  1. 装饰器@table 定义student表,类名 student 是表名, student_db 是数据库名。
  2. 装饰器 @column 定义列,ColumnType.STRING 表示该字段是文本类型
  3. 每个表必须拥有一个主键字段,ColumnType.PRIMARY 表示该字段为主键字段
  4. 每个实体类必须继承 Table

装饰器说明

装饰器名 描述 示例
@table 定义表 @table("student_db")
@column 定义列 @column(ColumnType.STRING)

字段类型枚举

表字段枚举值与TypeScript基本类型保持一致

字段类型枚举 描述
ColumnType.PRIMARY 主键
ColumnType.BOOLEAN 布尔值
ColumnType.NUMBER 数值
ColumnType.STRING 字符串
ColumnType.ARRAY 数组
ColumnType.DATE 日期
ColumnType.ANY 任意类型

如何使用

以上述定义的 student 表为例

websql-orm 方法列表

sqlite.fromSql 查询表记录,返回记录列表

var list = await sqlite.fromSql(new student(),
            'select * from student where user_name=? and id=? ',
            ['Tom','guid']);

sqlite.fromSqlFirst 查询首条表记录,返回首条记录

var info = await sqlite.fromSqlFirst(new student(),
            'select * from student where user_name=? ',
            ['Tom']);

sqlite.exist 查询记录是否存在,返回true或false

var result = await sqlite.exist('b4ce6b51-0bd6-46ee-a5c7-d1d5a93bdee9');

sqlite.insert 插入记录,返回受影响的行数

var stu = new student();
stu.id = uid;
stu.user_name = 'Tom'; 
var result = await sqlite.insert(stu);

sqlite.update 修改记录,返回受影响的行数

var info = await sqlite.fromSqlFirst(new student(),
            'select * from student where user_name=? ',
            ['Tom']);
info.user_name = 'Sam'; 
var result = await info.save(); //或者 var result = await sqlite.update(info)

sqlite.query 查询记录,返回记录列表

var list = await sqlite.query({ user_name:'Tom'});

sqlite.queryFirst 查询首条记录

var info = await sqlite.queryFirst({ user_name:'Tom'});

sqlite.execSql 执行sql语句,返回受影响行数

var result = await sqlite.execSql(new student(),
                'insert into (id,user_name) values (?,?)',
                ['b4ce6b51-0bd6-46ee-a5c7-d1d5a93bdee9','Tom']);

示例

import { sqlite } from 'websql-orm';
import { student } from './entity/student';

export class Demo {
    constructor() {
        var that = this;
        setTimeout(async () => {
            var uid = that.uuid();
            //实体实例
            var data = new student();
            data.id = uid;
            data.user_name = "Tom";
            //插入记录
            var insertResult = await sqlite.insert(data);
            if (insertResult) {
                //使用sql语句查询刚刚插入的记录
                var result = await sqlite.fromSqlFirst(new student(), "select * from student where id=?", [uid]);
                console.log("使用sql语句查询刚刚插入的记录:")
                console.log(result);
                //修改user_name
                result.user_name = "Sam";
                //直接调用save()方法保存
                var saveResult = await result.save();
                if (saveResult) {
                    //使用简易方法查询刚刚保存的记录
                    var info = await sqlite.queryFirst(new student(), { id: uid });
                    console.log("使用简易方法查询刚刚保存的记录:")
                    console.log(info);
                }
            }

            //演示一次性插入多条记录
            var students = new Array<student>();
            
            var stu1 = new student();
            stu1.id = that.uuid();
            stu1.user_name = "David";

            var stu2 = new student();
            stu2.id = that.uuid();
            stu2.user_name = "David";

            students.push(...[stu1, stu2]);

            //插入多条记录
            var insertsResult = await sqlite.insert(students);

            if (insertsResult) {
                //查询返回多条记录
                var stus = await sqlite.query(new student(), { user_name: "David" });
                console.log("使用简易方法查询查询返回多条记录:");
                console.log(stus);
            }
            
        }, 0);
    }

    /**
     * 生成伪guid
     */
    public uuid(): string {
        let s: any[] = [];
        let hexDigits = "0123456789abcdef";
        for (let i = 0; i < 36; i++) {
            s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
        }
        s[14] = "4";  
        s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  
        s[8] = s[13] = s[18] = s[23] = "-";
        let uuid = s.join("");
        return uuid;
    }
}
Clone this wiki locally