如何写一个 ORM 框架?

ORM的意思是对象关系映射,是一个数据库顶部最基本的抽象层。

最基础的 ORM 结构:

var _ = require('underscore');
var mysql = require('mysql');

var connection = mysql.createConnection({
  user     : 'root',
  password : "root",
  database : 'chat',
  socketPath  : '/Applications/MAMP/tmp/mysql/mysql.sock',
});

connection.connect(function(err) {
  if (err) {
    console.log('db_connection_err', err);
    return;
  }
});

//do NOT use 'new'
var makeORM = function(name){
//class-level variables
var tableName = name;

//plese use 'new'
var ORM = function(param){
   this.tableName = tableName;
    if(param){
      //init variables on instance
      this.msg_id = param.msg_id;
      this.text = param.text;
  }
};
ORM.findAll = function(callback){
  var sql_query = "select * from " + tableName;
  connection.query(sql_query,  function(err, rows){
      var result = _(rows).map(function(row){
      return ( new ORM(row) );
    });
    callback(result);
  });
};

ORM.find = function(){};

ORM.prototype = {
    getID: function(){
      return this.msg_id;
  },
    save: function(){},
    update: function(){}
}

  return ORM;
};

//this refers to the 'messages' table
var Messages = makeORM('messages');
Messages.findAll(function(result){
  console.log('result', result);
  _(result).each(function(obj){
      console.log( 'each result also has methods such as getID: ',               obj.getID() );
    });
});

connection.end();

ORM 结果 vs 普通的数据库查询结果

ORM提供了另外一个抽象层的同时ORM查询往往返回非通用对象。

常规数据库查询返回的结果是一个通用对象或很有可能返回一个通用对象的数组。这些通用对象没有经过构造就返回所以没有方法。但是从另外一个侧面说明,SQL语言的设计使得查询只指定返回哪些内容但不知道如何返回想要的结果。

连接表join table vs 连接查询join query

连接表需要确保数据库里真的存在一张表。

连接查询往往在执行过程中产生一张临时连接表,但在连接查询完成之后会立刻销毁临时连接表。

原文链接

你可能感兴趣的:(如何写一个 ORM 框架?)