JugglingDB

跨数据库的 ORM 框架
授权协议 MIT
开发语言 JavaScript
所属分类 Web应用开发、 Node.js 扩展
软件类型 开源软件
地区 不详
投 递 者 朱炜
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

JugglingDB 是一个跨数据库的 ORM 框架,提供了访问大多数数据库的通用接口,支持包括:mysql, mongodb, redis, neo4j and js-memory-storage. 你可扩展其他数据库的适配器,支持回调和钩子。

示例代码:

var Schema = require('./jugglingdb').Schema;
var schema = new Schema('redis', {port: 6379}); //port number depends on your configuration
// define models
var Post = schema.define('Post', {
    title:     { type: String, length: 255 },
    content:   { type: Schema.Text },
    date:      { type: Date,    default: Date.now },
    published: { type: Boolean, default: false }
});
// simplier way to describe model
var User = schema.define('User', {
    name:         String,
    bio:          Schema.Text,
    approved:     Boolean,
    joinedAt:     Date,
    age:          Number
});

// setup relationships
User.hasMany(Post,   {as: 'posts',  foreignKey: 'userId'});
// creates instance methods:
// user.posts(conds)
// user.posts.build(data) // like new Post({userId: user.id});
// user.posts.create(data) // build and save

Post.belongsTo(User, {as: 'author', foreignKey: 'userId'});
// creates instance methods:
// post.author(callback) -- getter when called with function
// post.author() -- sync getter when called without params
// post.author(user) -- setter when called with object

schema.automigrate(); // required only for mysql NOTE: it will drop User and Post tables

// work with models:
var user = new User;
user.save(function (err) {
    var post = user.posts.build({title: 'Hello world'});
    post.save(console.log);
});

// or just call it as function (with the same result):
var user = User();
user.save(...);

// Common API methods

// just instantiate model
new Post
// save model (of course async)
Post.create(cb);
// all posts
Post.all(cb)
// all posts by user
Post.all({where: {userId: user.id}, order: 'id', limit: 10, skip: 20});
// the same as prev
user.posts(cb)
// same as new Post({userId: user.id});
user.posts.build
// save as Post.create({userId: user.id}, cb);
user.posts.create(cb)
// find instance by id
User.find(1, cb)
// count instances
User.count([conditions, ]cb)
// destroy instance
user.destroy(cb);
// destroy all instances
User.destroyAll(cb);

// Setup validations
User.validatesPresenceOf('name', 'email')
User.validatesLengthOf('password', {min: 5, message: {min: 'Password is too short'}});
User.validatesInclusionOf('gender', {in: ['male', 'female']});
User.validatesExclusionOf('domain', {in: ['www', 'billing', 'admin']});
User.validatesNumericalityOf('age', {int: true});
User.validatesUniquenessOf('email', {message: 'email is not unique'});

user.isValid(function (valid) {
    if (!valid) {
        user.errors // hash of errors {attr: [errmessage, errmessage, ...], attr: ...}    
    }
})
 相关资料
  • Pony 是一个很有意思的 ORM, 它的特别之处在于可以使用 Python 生成器的语法来创建数据库请求, 我们可以用这样的语句来查询数据库: select(p for p in Product if p.name.startswith('A') and p.cost <= 1000) Pony 还提供了一个在线的数据库结构编辑器:Pony Editor 演示示例:University 注意:P

  • Laravel ORM Eloquent 使用时请注意长连接的异常处理,否则会出现 PDO::prepare():MySQL server has gone away 安装 composer require illuminate/database 注意 有个问题就是安装了illuminate/database不能分页,需要安装illuminate/pagination; illuminate/pa

  • Github : ThinkORM - 从ThinkPHP5.1独立出来的数据库ORM类库 安装 composer require topthink/think-orm 创建数据库配置 在 \EasySwoole\Config 里添加配置项 ,这里仅列出连接mysql必须的配置项,完整配置项可以参考think-orm类库目录下的config.php文件 [ 'database' =>

  • 可以使用model('ModelName')->get($id)和model('ModelName')->all来生成数据的ORM封装对象。 $content = $model->get(1); //这里返回的是一个Record对象 $content->title = 'hello world'; //Update操作 $content->save(); //

  • 几年来,我首先在C#、MVC、实体框架和数据库方面进行开发。现在我想试试Java,选择Play Framework和IDEA作为IDE。现在我搜索的ORM系统如下: 易于集成在游戏框架中 以数据库类生成(逆向工程)为主要工具 使用简单的语言,如C#中的LINQ(例如:在context.MY_表中从x选择x)

  • 本文向大家介绍详解数据库中跨库数据表的运算,包括了详解数据库中跨库数据表的运算的使用技巧和注意事项,需要的朋友参考一下 1. 简单合并(FROM) 所谓跨库数据表,是指逻辑上同一张数据表被分别存储在不同数据库中。其原因有可能是因为数据量太大,放在一个数据库难以处理,也可能在业务上就需要将生产库和历史库分开。而不同的数据库,可能只是部署在不同的机器上的同种数据库,也可能是连类型都不同的数据库系统。