DATASCOOTER
Support This Project
Custom Search

English Home
Russian Home
JavaDoc
Quickstart
Performance
Guide
Download
Example
Contacts

 Object Relational Mapping system

Когда-то давным давно(в далекой-далекой галактике...) попытались мы использовать Hibernate но он был изначально рассчитан для серверных приложений, вставлял свои прокси-объекты где его не просили, извлекал всю цепочку связанных объектов или ничего не извлекал и слишком плотно был связан маппингом, загружаемым при запуске...
Вот и возникла такая идея - создать простую и понятную систему ORM небольшого размера которая могла бы работать как на клиенте так и на сервере, не вставляла своих прокси-объектов там где их не ожидаешь и позволяла настраивать и маппинг и специфику извлечения групп объектов в Runtime - во время исполнения программы, извлекала из базы данных только то что в данный момент, в данном контексте использования необходимо приложению а не то что прописано в маппинге один раз и навсегда, базировалась на JDBC, делала процесс извлечения объектов из базы данных и сохранения их обратно абсолютно прозрачным и предсказуемым. Чтобы маппинг делался легко и без ошибок и не засорял ни код классов ни директории приложения своим присутствием. Чтобы приложение по возможности вообще не было в курсе что его объекты где-то там сохраняют. Чтобы могла работать не только с объектами но и просто с наборами данных ,которые могут изменяться во время работы...
Продукт изначально был сделан под Eclipse но теперь может работать и без него. Создавать маппинг в стандартном еклипсовом редакторе точек расширения гораздо удобнее чем руками xml теги писать. Проекту уже три года - применялся он на нескольких больших проектах здесь выложена уже вторая версия - после рефакторинга и удаления лишнего. В пакете плагинов есть плагин с JUnit тестами - они демонстрируют функциональность, скорость и надежность работы.

Уникальные свойства


  • Можно извлечь из базы сложную структуру объектов(связанных или не связанных между собой) причем в каждой ветке могут быть свои условия. Эту же структуру можно удалить из базы или сохранить в базу(может быть в другую - количество и вид неограничены) или сериализовать и передать на удаленный толстый клиент, где затем положить в локальную базу и работать с ней точно таким же образом.
  • Извлечение связанных объектов - что как и на какую глубину - не задается жестко маппингом а настраивается в зависимости от контекста использования.
  • Система к способна работать с абстрактными наборами данных, не привязанных к каким-либо классам - например если при создании объекта маппинга(или в его xml описании) вы не укажете имя класса - то получится просто именованный набор данных из одной таблицы. Без привязки к каким-либо классам, класслоадерам и пр. Но точно так же - как и класс - по имени - вы сможете его извлекать из базы, менять и сохранять снова. За счет такой отвязки от вопроса загрузки классов экономится время и вычислительная мощность машины - например чтобы извлечь из одной базы кучу объектов и сохранить в другую вовсе не обязательно их инстанцировать, даже если такие классы были замаппированы заранее и класслоадер знает как их загружать - инстанцирование производится непосредственно там где пользователь ожидает получить объект а внутри системы перемещаются простые иерархические объекты одного вида, содержащие двумерные массивы Object[][]. Это означает что впоследствии - когда система уже у заказчика и занята важным делом - вам не нужно ломать голову над перекомпиляцией для добавления каких-то классов в работающую систему если вдруг требования изменились - без этого можно обойтись и вообще предусмотреть в вашем продукте работу с именованными наборами данных а не объектами.
  • Малый размер - примерно 120 KB

Threepio

Russian Home