Все ненавидят ORM.

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

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

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

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

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

Вот теория, лежащая в основе этой конкретной ORM:

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

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

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

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

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

Список ‹Person› people = db.where («name =?», «Bob»). Results (Person.class);

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

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

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

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

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

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