Кто-нибудь, кто работает с Android («gPhone»), знает или знает место, где я могу найти для него хороший ORM-инструмент? Код написан на Java, а база данных - SQLite. Я хотел бы найти инструмент, который, учитывая определение объекта, может автоматически генерировать таблицы и функции CRUD (что было бы здорово), или, если не считать этого, инструмент, который может принимать определение таблицы, определение объекта, и автоматически сгенерировать функциональность CRUD. Проблема в том, что все это должно происходить в среде Android, которая имеет свои собственные соглашения о том, как работает доступ к базе данных.
его 2014. Я подумал, что упомяну Sprinkles (github.com/emilsjolander/sprinkles), так как никто не упомянул об этом .. 500 звезд на github, на meaven central, обозреватели контента, стоит проверить
2015 год. Software Tree недавно выпустила JDXA, простую, но мощную и гибкую ORM для Android. Поддерживает наследование, отношения один к одному, один ко многим, многие к одному и многие ко многим. Дружественная ненавязчивая модель программирования JDXA POJO (Plain Old Java Objects) не требует от вас изменения классов Java каким-либо образом: - Нет необходимости создавать подклассы классов вашей предметной области из любого базового класса - Нет необходимости загромождать исходный код аннотациями - Нет необходимости в классах DAO - нет генерации исходного кода
Обратите внимание на этот красивый учебник по JDXA ORM.
Если вы предпочитаете простой естественный код Android без дополнительных библиотечных зависимостей, обратите внимание на файл Пример генератора кода однорангового класса SQLite. Он основан на аннотациях и поддерживает комбинированные первичные ключи, комбинированные уникальные ограничения и индексацию.




ActiveRecordJS от Aptana - это ORM для Javascript, который должен работать на gPhone. Он предназначен для работы с Jaxer и Gears. Когда вы используете адаптеры Jaxer, вы можете подключиться к SQLLite.
ОБНОВЛЕНИЕ: не думаю, что я ясно дал понять, но ActiveRecordJS - это ORM, работающий на стороне клиента, что может быть преимуществом для вас на gPhone.
В коде Java? Или в коде JavaScript?
Я почти уверен, что вы говорите о решении Javascript, предназначенном исключительно для браузерных (веб-приложений). Я не понимаю, как это связано с разработкой нативных приложений для Android.
Я не знаю ничего, о чем вы просите, но есть альтернатива SQLite, которая может оказаться полезной, если ваши требования к архитектуре гибкие. Возможно, стоит проверить db4o:
у меня были хорошие результаты с DB40 ... хотя хочу проверить Active Android ...
Я разработал собственную реализацию JPA ORM для Android. Он еще не полностью завершен, но вы можете аннотировать класс аннотациями @Entity, @Id, @Column и получить объекты JPA, которые можно сохранять и извлекать из базы данных SQLite. Прежде чем я опубликую его для публики, он нуждается в некоторых дополнительных функциях и очистке, но, если будет достаточно интереса, это может ускорить мои усилия.
Звучит интересно, у вас уже есть что-то. посмотреть / попробовать? Привет, Мартин
Как продвигается вперед, более чем год спустя? JPA + Аннотации на Android звучат ОТЛИЧНО!
ActiveAndroid(20 долларов США) похоже, что это может быть именно то, что вам нужно.
Я знаю, что вы здесь не пробуете ничего хитрого, но не могли бы вы раскрыть свою принадлежность к своим сообщениям, когда упоминаете один из ваших собственных продуктов на SO? Я знаю, что ваше имя находится в нижнем колонтитуле связанной страницы, но мы пытаемся бороться с астротурфинг (а это не так), поэтому мы просим всех следовать тем же правилам раскрытия информации. Спасибо.
Напоминаем, что ActiveAndroid не является бесплатным.
ActiveAndroid теперь бесплатен и имеет открытый исходный код - pardom.github.com/ActiveAndroid
Думал, что я просто добавлю сюда свои 0,02 доллара о моем Пакет ORMLite.
Это легкая замена Hibernate и использует собственные вызовы базы данных ОС Android для поддержки SQLite на Android. Он также поддерживает многие другие типы баз данных, использующие JDBC на других архитектурах. У нас есть Список рассылки Android для вопросов ORMLite.
Есть ли в ORMLite встроенная поддержка отношений (один | много) -к (многие | один)? Я не могу найти много информации об этом ... Если нет, то есть ли планы на это?
Зависит от того, что вы подразумеваете под «поддержкой». Есть пример кода о том, как использовать «посторонние объекты», как вы работаете с «один ко многим», и есть примеры того, как использовать таблицы соединения для выполнения «многие ко многим» (ormlite.com/docs/examples). Отправьте сообщение в список пользователей с дополнительными вопросами (groups.google.com/group/ormlite-user).
Выглядит неплохо, однако размер jar превышает 200 КБ против 18 КБ для ActiveAndroid. Я ничего не вставляю в свое приложение, неважно насколько оно хорошее, что увеличивает его размер на 40%.
Ага, конечно больше, чем ActiveAndroid. Конечно, гораздо больше функциональности. Также бесплатное программное обеспечение в отличие от лицензии AA. Но если ваша цель - размер, ORMLite не для вас.
@Gray Ironic, так как он должен быть "Lite": P
Действительно @SalmanPK. Хотя есть разная степень lite. :-)
@Gray, может, скажите, пожалуйста, как мы можем использовать IDR для импорта проекта Android ORMLite, я хочу расширить его для своего проекта
Я также ищу ORM на Android. Я тестировал ActiveAndroid, NeoDatis и db4o, и думаю, что воспользуюсь одним из двух последних.
NeoDatis и db4o действительно похожи, поэтому я хотел бы получить несколько советов, чтобы выбрать лучший. Кто-то использует один из них в своем проекте? Я буду использовать его как для бесплатного, так и для платного приложения, но похоже, что у них нет никаких лицензионных ограничений для Android.
Существует тест здесь, который, кажется, говорит, что NeoDatis быстрее, чем db4o, но я не знаю, можем ли мы основывать свое мнение на этом.
Db40 и NeoDatis - объектные базы данных, размер которых полностью запрещен для использования на Android.
@ DroidIn.net не могли бы вы предоставить ссылку, которая поддерживает ваш комментарий?
Мне понравился ActiveAndroid. Вроде написано специально для Android. Это кажется мне плюсом.
У меня есть некоторый опыт работы с Ruby on Rails, и если вам нравится способ ActiveRecord в Rails, вы можете очень быстро приступить к работе с этой библиотекой.
https://www.activeandroid.com/
Хорошая структура, но она конфликтует с библиотекой org.codehous.jackson, поэтому, если вы используете ее в своем проекте, вы не сможете использовать ActveAndroid.
Как это конфликтует? Вы сообщили об этом как об ошибке в tracker.activeandroid.com?
Может быть, взгляните на androrm.the-pixelpla.net, в нем есть большинство функций, и я бы сказал даже больше. Плюс: это бесплатно и с открытым исходным кодом.
Еще один новичок: android-active-record. Это очень легкий и простой в использовании фреймворк для Android, поддерживаемый SQLite. http://code.google.com/p/android-active-record/
Похоже, он все еще находится на ранней стадии разработки, но за ним стоит следить!
Пробовал - хорошее начало, но нужно много работать, чтобы быть готовым к прайм-тайму
https://github.com/ahmetalpbalkan/orman
Фреймворк Ормана может вам помочь. Он специально разработан для этого, очень маленький и полезный.
Этот инструмент очень прост и удобен в использовании.
Был негативный опыт работы с db4o (v. 8): индексация не работала должным образом (исключение и т. д.). Поэтому мне не удалось избежать создания дубликатов в сторонних таблицах при наличии объекта в структуре объекта. Более подробное объяснение в моем вопрос. Надеюсь, однажды будет лучше.
Если производительность и размер кода имеют значение, проверьте greenDAO. Я являюсь его автором, и моей мотивацией для создания другого ORM было избежать отражения в горячих точках. Оказалось, что greenDAO может быть до 4 раз быстрее ORMLite. За подробностями обращайтесь к страница функций.
Выглядит неплохо, но необходимость генерировать Дао для меня отпугивает :(
Да, создание кода - это дополнительный шаг для разработчиков, но он значительно снижает производительность приложения. Результаты как начальной загрузки, так и анализа базы данных выполняются значительно быстрее. Другие инструменты полагаются на рефлексию, которая в Android очень медленная.
Думаю, после повторного посещения (не так уж и усталого) я сразу бросился на это. Смотрится лучше, чем альтернативы. и им демонстративно все для скорости!
Я использую greenDao в своих проектах, и мне это очень нравится.
@greenrobot у вас есть несколько демонстраций "больших приложений", использующих вашу библиотеку?
@greenrobot поддерживает ли ваша библиотека отношения "многие ко многим"? Можем ли мы создать виртуальные таблицы для ускорения поиска? Включает ли он все функции, описанные на sqlite.org для базы данных sqlite?
@StErMi Path использует greenDAO. У них> 1 млн установок. См. github.com/greenrobot/greenDAO/issues/20#issuecomment-132789 22
Мммм действительно действительно интересно. Спасибо @greenrobot. На самом деле, если честно, я просто использую Gson и сохраняю его прямо в планшет. Каждая таблица имеет _id, json и список полей индекса (используемых для поиска).
Извлекает ли greenDAO отношения через соединения? Мы только что проверили OrmLite и были удивлены, увидев, что чужой @DatabaseField извлекается в отдельном запросе. Хуже того, при вызове dao.queryForAll возникает проблема N + 1; в случае 1000 элементов он получит элемент, затем выполнит 1000 запросов для поля отношения ...
Связи «один к одному» могут быть быстро решены с помощью одного запроса вместе с основным объектом. Найдите loadDeep / queryDeep в greendao-orm.com/documentation/relations. Отношения ко многим разрешаются с помощью одного запроса.
Я думаю, что важно сказать, что greenDAO лучше совместим с ProGuard, чем ORMLite.
Нет поддержки Отношения "многие ко многим" - это большой провал
@Sheagorath, JDXA ORM для Android легко поддерживает моделирование сложных объектов, включая наследование, отношения один-к-одному, один-ко-многим и многие-ко-многим, и предлагает дружественную ненавязчивую модель программирования POJO (простые старые объекты Java), что не требует от вас изменения классов Java каким-либо образом: • Нет необходимости создавать подклассы классов вашей предметной области из какого-либо базового класса • Нет необходимости загромождать исходный код аннотациями • Нет необходимости в классах DAO • Нет генерации исходного кода
@Sheagorath greenDAO 2.0 поддерживает "многие ко многим"
@greenrobot: да, но он глючит и непригоден для использования, см .: github.com/greenrobot/greenDAO/issues/249
Несмотря на то, что это старый пост, тема все еще актуальна. Поэтому хочу поделиться интересной статьей и хорошим подходом к решению большинства проблем, упомянутых в вопросе:
http://blog.codecentric.de/en/2011/04/android-persistence-accelerated-small-inhouse-orm/
Надеюсь, кто-нибудь найдет это таким же полезным, как и я!
Мой собственный DroidParts /http://droidparts.org/ только что достиг v0.5. Это библиотека DI / ORM и многое другое. Не так много документации, но включает образец приложения.
Может быть, добавление соответствующей документации - хорошая идея.
Этот вопрос не может устареть, но предлагаемые рамки могут. Итак, вот сначала список того, что я считаю важным в таких фреймворках для сравнения:
А вот список фреймворков с примечаниями по вышеперечисленным пунктам. Я поискал еще несколько таких, как aBatis и Hadi, но добавил только те, которые имели некоторую активность после 2011 года.
Я не пробовал ни одного из них, но, возможно, я смогу сэкономить немного времени нынешним читателям, перечислив текущие активные проекты. Пожалуйста, добавьте комментарий, если вам известны другие проекты, которые удовлетворяют некоторым из вышеперечисленных пунктов и имеют серьезные разработки (в течение некоторого времени).
РЕДАКТИРОВАТЬ (ноябрь 2013 г.): обновлен список до текущего статуса проектов. Некоторые из них добавили теги выпуска в свои репозитории на github, а также поддерживают Maven / Gradle. Хорошая работа!
РЕДАКТИРОВАТЬ (апрель 2015 г.): обновлен список, добавлены Sprinkles (согласно комментарию @AndroidGecko) и Realm.io.
Я настоятельно рекомендую использовать Realm, он работает очень быстро и плавно!
Я не думаю, что сейчас есть в наличии.