Все ненавидят ОРМ.

Но правда в том, что спустя десятилетия после его изобретения мы все еще говорим об этом. Нам все еще это нужно. Есть несколько альтернатив.

Несмотря на NoSQL, базы данных SQL остаются довольно хорошим способом хранения данных. И объекты остаются довольно хорошим способом представления данных и управления ими. И нельзя обойти тот факт, что существует несоответствие импеданса.

Если вы пишете на Java и взаимодействуете с базами данных, у вас действительно есть три основных варианта. Вы можете использовать большой и сложный ORM, такой как Hibernate. Вы можете писать прямые вызовы JDBC. Или вы можете попытаться избавиться от некоторых шаблонов JDBC, используя одну из микро-ORM.

Или вы можете сделать то же, что и я, и написать свой собственный микро-ORM, который берет хорошие идеи, найденные в других ORM.

Я сделал это, потому что мне просто не понравился дизайн микро-ORM, который я нашел. Слишком неуклюже, слишком это, слишком это. Поэтому я решил начать с чистого листа и применить идеи других ORM, которые казались простыми и элегантными.

Вот теория этой конкретной ORM:

Во-первых, SQL действительно хорош. Он проверен в бою и делает все, что вам нужно.

Во-вторых, JDBC — это утомительно, потому что требует тонны повторяющегося кода. JDBC был разработан таким образом по определенной причине; кто-то где-то имел законную потребность в каждой функции, и вся эта гибкость была необходима, чтобы приспособить все функции. Но это, безусловно, усложняет повседневную работу.

Таким образом, улучшенная ORM должна делать простые вещи простыми, а сложные — возможными. Простые вещи должны выполняться в одной строке кода. Трудные вещи должны стать возможными, если убрать их с дороги и позволить программисту при необходимости перейти к чистому SQL. Это лучшее из обоих миров.

Результатом этих усилий является Dieselpoint Norm. (Первоначально я предполагал, что «Норма» означает «Не объектно-реляционное сопоставление», но это то, что есть, и это нормально.)

Норм хорошо справляется с простыми вещами. Вы можете выполнить запрос в одной строке кода:

List‹Person› people = db.where("name=?", "Bob").results(Person.class);

Вы можете выполнять другие задачи с таким же минималистичным кодом. Установка/конфигурация также очень проста: просто укажите необходимые параметры соединения JDBC, и все готово.

Система будет использовать существующие аннотации JPA/Hibernate (@Table, @Column, @Id и т. д.), но не требует их.

Я очень старался найти правильный баланс между тем, чтобы делать слишком много и делать слишком мало. Слишком много, и вы получите крутую кривую обучения. Слишком мало, и вы упираетесь в кирпичные стены. Вы никогда не можете быть уверены, что поняли все правильно.

Но мы используем этот код в производственной среде нашего SaaS-продукта для корпоративного поиска в Dieselpoint и остались им довольны. Он обеспечивает интерфейс над базой данных управления и координации. Работает отлично.

Мы надеемся, что вы найдете это стоящим.

Вы можете найти Норма Dieselpoint на Github здесь.