Introduction to ORMs

Why ORM?

Object-Relational Impedance Mismatch:

Basically, OO doesn't talk with SQL

  • Lots of SQL for lots of objects
  • RDBMs' dialect
  • Write/change/maintain nightmare

Remind me, why do we use RDBMS?

  • High performance and powerful
  • Available everywhere
  • Proven
    • In theory
    • and in practice
  • Known in almost every language
  • Almost no dominant replacements

Solution: ORM

Object-relational Mapping (ORM) is a way of mapping between objects and relational databases.

ORM Benefits

  • Productivity
    • OOP

    • Validation

    • No need to write SQL

  • ​​Performance
    • Cache Objects

    • Lazy/Eager Loading

    • Lazy Updating

  • Portability
    • Different SQL dialects
  • Protection
    • Against SQL injection attacks, sanitizing, and escaping data

ORM Architecture

Without ORM

With ORM

-- Creating a Tasks table w/o an ORM
CREATE TABLE IF NOT EXISTS tasks (
  id serial PRIMARY KEY NOT NULL,
  title character varying(125) NOT NULL,
  description character varying(125) NOT NULL,
  deadline DATE NOT NULL,
  );

-- Querying w/o an ORM
SELECT * FROM tasks;

-- Inserting a new tasks 
-- into the Tasks table w/o an ORM
INSERT INTO tasks (
    default, 
    'pay bills', 
    'very important', 
    10/10/16
);
// Define mapping between a 
// model and a table w/ an ORM
var Task = sequelize.define('tasks', {
  title: Sequelize.STRING,
  description: Sequelize.TEXT,
  deadline: Sequelize.DATE
});

// Querying with an ORM
Task.findAll();

// Create a new task w/ an ORM
Task.create({
    title: 'pay bills',
    description: 'very important task',
    deadline: new Date('2016-10-10T14:30:00')
})
.then(function(task){ 
    ...
});

Disadvantages of
ORM

  • Can add complexity to code

    • ​Potential increases processing overhead
  • ​ORM might dictate DB design 

Demo

Sequelize + Express

Resources

ORM

By Joe Karlsson

ORM

Introduction to Object Relational Mapping

  • 1,825