Частина перша
Оскільки без підтримки баз даних не обходиться практично жодне сучасне додаток, то питань взаємодії з ними приділяється пильна увага у всіх підручниках з програмування. На жаль, про таку корисну річ, як ORM, в підручниках чомусь пишуть нечасто.
У кожної милозвучно абревіатури існує безліч розшифровок. Ми будемо говорити про ту з них, яка звучить як object-relational mapping, або, якщо записати те ж саме, але тільки вже по-російськи, - об'єктно-реляційна проекція. Термін, що й казати, для непосвяченого звучить ой як хитромудро, однак, насправді, нічого концептуально складного в ньому немає.
Велика частина мов програмування, які використовуються сьогодні в індустрії програмування, відносяться до об'єктно-орієнтованим мовам. Це означає, що програміст, створюючи програми на них, оперує з об'єктами - деякими абстрактними сутностями, що мають деякі властивості і дозволяють застосовувати по відношенню до себе деякі методи. При всьому при цьому бази даних, які використовуються для зберігання інформації про ці об'єкти, є реляційними.
В общем-то, виходів з цієї ситуації може бути кілька. Скажімо, можна використовувати замість реляційної СУБД об'єктно-орієнтовану - тобто, таку, в якій інформація зберігається не у вигляді звичних всім таблиць, а у вигляді точно таких же об'єктів, якими оперують програмісти в своєму коді. Що ж, ідея хороша, тим більше, що існують системи управління базами даних, що дозволяють вирішувати цю проблему саме таким способом. Однак саме по собі використання об'єктно-орієнтованої СУБД призводить до цілого ряду нових проблем. Реляційні СУБД застосовуються так широко зовсім не тому, що вони незручні для програмістів - вони надійні, швидкі і, найголовніше, звичні.
Може, є який-небудь ще спосіб вирішення означеної проблеми? Звичайно є. Він, власне кажучи, і називається ORM. Полягає він в застосуванні спеціальних фреймворків або бібліотек, які самі займаються зв'язуванням об'єктів в програмі і записів в таблицях бази даних. Завдяки їм програміст частково позбавляється від набридливої рутини і отримує більше часу для того, щоб думати над найважливішими аспектами реалізації проекту.
ORM-рішення мають багато переваг, в порівнянні з "ручний" роботою з базами даних в проекті. Вони дозволяють оптимізувати кількість запитів до бази даних, але при цьому уникнути завантаження надлишкових на даний момент для додатка даних. Крім того, завдяки єдиному для всіх використовуваних СУБД API-інтерфейсу, який надає ORM-фреймворк, в разі необхідності зміни СУБД за бажанням замовника або просто через надмірне зростання кількості даних дуже легко можна перейти з однієї СУБД на іншу, оскільки все SQL- діалекти вже реалізовані в фреймворку його розробниками, і програмісту, що використовує такий фреймворк, немає необхідності довгими зимовими вечорами вивчати кожен з них, щоб швидко і успішно перевести додаток в разі гострої необхідності з однієї СУБД н іншу. Хоча, звичайно, єдине API зручно не тільки в таких екстремальних випадках. Про це буде ще трохи сказано далі.
Java - це така мова програмування, на якому в наші дні пишуть все. Ну, або майже все - починаючи від тих самих горезвісних інтернет-магазинів і закінчуючи складними розподіленими системами корпоративного рівня. Драйверів на ньому, звичайно, не пишуть, але він на це, правда, і не претендує.
Варто зауважити, що, хоча Hibernate - далеко не єдиний ORM-фреймворк для Java, він користується значною популярністю серед програмістів, оскільки це потужний, добре налагоджений і перевірений на безлічі реальних проектів програмний продукт.
Архітектура простого додатка, що використовує Hibernate, теж, вибачте за тавтологію, досить проста - ви можете побачити її на ілюстрації до статті. Як і очікувалося, Hibernate є сполучною ланкою між самим додатком і даними, що зберігаються в базі. При цьому зверніть увагу на два невеликих темніших прямокутника на фоні прямокутника з написом "Hibernate" - вони символізують конфігураційні файли, яким ми з вами повинні будемо приділити саме що ні на є пильна увага.
Як працює Hibernate? Завантаживши свою власну конфігурацію з файлу hibernate.cfg.xml, він збирає інформацію про класи, які розробник вирішив "замапіть" в базу даних зі спеціальних конфігураційних файлів, які записуються в форматі XML. Після завантаження всіх конфігураційних файлів можна створювати сесії підключення до бази даних за допомогою "фабрики сесій", і працювати з ними - змінювати дані, додавати, видаляти. Загалом, як то кажуть, повернути з даними все, що тільки душі буде завгодно.
Трохи про підтримуваних СУБД
Як бачите, список підтримуваних СУБД вийшов досить-таки значним, що зайвий раз підтверджує популярність і успішність фреймворка, про який ми з вами зараз ведемо розмову. На жаль, на цей раз поки що все - газетні статті, як відомо, мають деякі обмеження за обсягом, а тому розмова про Hibernate продовжимо в наступному номері.
Версія для друку