sqlite-orm

the ORM framework for sqlite
Install
$ npm install --save sqlite-orm
Usage
The coffeescript sample code
Mapper = require 'sqlite-orm'
path = require 'path'
Migration = Mapper.Migration
ModelBase = Mapper.ModelBase
Migration.createTable 'ParentModel', (t) ->
t.addColumn 'name', 'TEXT'
Migration.createTable 'ChildModel', (t) ->
t.addColumn 'name', 'TEXT'
t.addReference 'parentModelId', 'ParentModel'
class ChildModel
ModelBase.includeInto this
constructor: (params) -> @initModel params
@initAssos: ->
@belongsTo ParentModel
class ParentModel
ModelBase.includeInto this
constructor: (params) -> @initModel params
@initAssos: ->
@hasOne ChildModel
mapper = new Mapper path.resolve(__dirname, 'test.db')
mapper.sync()
The corresponding javascript code.
var Mapper = require('sqlite-orm');
var Migration = Mapper.Migration;
var ModelBase = Mapper.ModelBase;
var path = require('path');
Migration.createTable('ParentModel', function(t) {
t.addColumn('name', 'TEXT');
});
Migration.createTable('ChildModel', function(t) {
t.addColumn('name', 'TEXT');
t.addReference('parentModelId', 'ParentModel');
});
function ParentModel(params) {
this.initModel(params);
}
ModelBase.includeInto(ParentModel);
function ChildModel(params) {
this.initModel(params);
}
ModelBase.includeInto(ChildModel);
ParentModel.initAssos(function() {
ParentModel.hasOne(ChildModel);
});
ChildModel.initAssos(function() {
ChildModel.belongsTo(ParentModel);
});
mapper = new Mapper(path.resolve(__dirname, 'test.db'));
mapper.sync().then(function() {
});
More sample can refer to below sites:
API
Mapper
-
sync function() synchronize the model definition and the database
-
close function() close the database
-
beginTransaction: function() begin the transaction.
-
endTransaction: function() end the transaction.
-
scopeTransaction: function(callback) make the callback invoke in the transaction, after this callback complete, endTransaction will invoke automatically.
-
@Migration Migration get the Migration class
-
@ModelBase ModelBase get the ModelBase class
-
@INTEGER String the INTEGER data type
-
@REAL String the REAL data type
-
@TEXT String the TEXT data type
-
@BLOB String the BLOB data type
Migration
-
@createTable: function(tableName, callback) create the database table
-
@clear: function() clear the table definition
TableInfo
-
addColumn: function(name, type, opts) add the table column
-
name: String the column name
-
type: String the column data type, such as INTEGER or TEXT
-
opts: Object the column options
-
createIndex: function(indexName, columns) add index for the specific column
- indexName:
String the index name.
- columns:
Array each item of columns is the column name that need index.
-
addReference: function(name, tableName, opts) add foreign key
-
name: the column name that need index
-
tableName: the name of table that the index will point to
-
opts: Object the index options
ModelBase
-
@initAssos: function() declare the association
all the subclass must implement this interface to declare the association
-
@hasOne: function(ChildModel, opts) declare this Model has one child Model
-
@hasMany: function(ChildModel, opts) declare this Model has many children.
-
@belongsTo: function(ParentModel, opts) declare this Model is member of ParentModel
-
@new: function(obj) create a new model object, not saved into database
obj: Object the attributes list
-
@create: function(obj) just like @new, but save into database
-
@drop: function() drop the table
-
@destroy: function() destroy this model object and delete the db row.
-
@find: function(where, opts) find the object that match the where statement
-
@findAll: function(where, opts) find all of object match the condition
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using gulp.
License
Copyright (c) 2015 liuxiong. Licensed under the MIT license.