/20@yegor256 1
what do you think?
/20@yegor256 2
ORM is a perfect
anti-pattern
Yegor Bugayenko
/20@yegor256 3
book.setTitle(“Object Thinking”);
session.update(book);
Book
Session
MySQL
JDBC
UPDATE book

SET title = “Object Thinking”

WHERE id = 555
book.getTitle();
statement.executeUpdate();
this.title
/20@yegor256 4
Map attrs = new HashMap();
attrs.put(“title”, “Object Thinking”);
book.updateAttributes(attrs);
Book Base
MySQL
JDBC
UPDATE book

SET title = “Object Thinking”

WHERE id = 555
statement.executeUpdate();
/20@yegor256 5
it’s offensive
/20@yegor256 6
SQL-speaking objects
/20@yegor256 7
book.rename(“Object Thinking”);
Book
MySQL
JDBC
UPDATE book

SET title = “Object Thinking”

WHERE id = 555
statement.executeUpdate();
/20@yegor256 8
JDBC, jOOQ, jcabi-jdbc
/20@yegor256 9
public class Book {
private final DataSource source;
private final int id;
Book(DataSource db, int id) {
this.source = db;
this.id = id;
}
public void rename(String title) {
new JdbcSession(this.source)
.sql(“UPDATE book SET title=? WHERE id=?”)
.set(title)
.set(this.id)
.update();
}
}
/20@yegor256 10
www.yegor256.com

ORM is a perfect anti-pattern