Есть ли хорошие инструменты ORM для разработки под Android?

Кто-нибудь, кто работает с Android («gPhone»), знает или знает место, где я могу найти для него хороший ORM-инструмент? Код написан на Java, а база данных - SQLite. Я хотел бы найти инструмент, который, учитывая определение объекта, может автоматически генерировать таблицы и функции CRUD (что было бы здорово), или, если не считать этого, инструмент, который может принимать определение таблицы, определение объекта, и автоматически сгенерировать функциональность CRUD. Проблема в том, что все это должно происходить в среде Android, которая имеет свои собственные соглашения о том, как работает доступ к базе данных.

Я не думаю, что сейчас есть в наличии.

mparaz 17.02.2009 13:36

его 2014. Я подумал, что упомяну Sprinkles (github.com/emilsjolander/sprinkles), так как никто не упомянул об этом .. 500 звезд на github, на meaven central, обозреватели контента, стоит проверить

AndroidGecko 10.04.2014 16:43

2015 год. Software Tree недавно выпустила JDXA, простую, но мощную и гибкую ORM для Android. Поддерживает наследование, отношения один к одному, один ко многим, многие к одному и многие ко многим. Дружественная ненавязчивая модель программирования JDXA POJO (Plain Old Java Objects) не требует от вас изменения классов Java каким-либо образом: - Нет необходимости создавать подклассы классов вашей предметной области из любого базового класса - Нет необходимости загромождать исходный код аннотациями - Нет необходимости в классах DAO - нет генерации исходного кода

Damodar Periwal 30.09.2015 04:12

Обратите внимание на этот красивый учебник по JDXA ORM.

Damodar Periwal 14.11.2015 01:35

Если вы предпочитаете простой естественный код Android без дополнительных библиотечных зависимостей, обратите внимание на файл Пример генератора кода однорангового класса SQLite. Он основан на аннотациях и поддерживает комбинированные первичные ключи, комбинированные уникальные ограничения и индексацию.

RookieGuy 27.04.2017 11:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
289
5
77 922
15

Ответы 15

ActiveRecordJS от Aptana - это ORM для Javascript, который должен работать на gPhone. Он предназначен для работы с Jaxer и Gears. Когда вы используете адаптеры Jaxer, вы можете подключиться к SQLLite.

ОБНОВЛЕНИЕ: не думаю, что я ясно дал понять, но ActiveRecordJS - это ORM, работающий на стороне клиента, что может быть преимуществом для вас на gPhone.

В коде Java? Или в коде JavaScript?

GWLlosa 16.02.2009 04:10

Я почти уверен, что вы говорите о решении Javascript, предназначенном исключительно для браузерных (веб-приложений). Я не понимаю, как это связано с разработкой нативных приложений для Android.

Brian Lacy 09.05.2010 09:12

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

у меня были хорошие результаты с DB40 ... хотя хочу проверить Active Android ...

Ben 27.06.2010 21:01
activeandroid.com выглядит круто, я с нетерпением жду возможности испытать его
slf 28.06.2010 16:38

Я разработал собственную реализацию JPA ORM для Android. Он еще не полностью завершен, но вы можете аннотировать класс аннотациями @Entity, @Id, @Column и получить объекты JPA, которые можно сохранять и извлекать из базы данных SQLite. Прежде чем я опубликую его для публики, он нуждается в некоторых дополнительных функциях и очистке, но, если будет достаточно интереса, это может ускорить мои усилия.

Звучит интересно, у вас уже есть что-то. посмотреть / попробовать? Привет, Мартин

MartinGrotzke 04.07.2010 13:58

Как продвигается вперед, более чем год спустя? JPA + Аннотации на Android звучат ОТЛИЧНО!

Spidey 19.07.2011 19:43

ActiveAndroid(20 долларов США) похоже, что это может быть именно то, что вам нужно.

Я знаю, что вы здесь не пробуете ничего хитрого, но не могли бы вы раскрыть свою принадлежность к своим сообщениям, когда упоминаете один из ваших собственных продуктов на SO? Я знаю, что ваше имя находится в нижнем колонтитуле связанной страницы, но мы пытаемся бороться с астротурфинг (а это не так), поэтому мы просим всех следовать тем же правилам раскрытия информации. Спасибо.

Bill the Lizard 25.08.2010 19:40

Напоминаем, что ActiveAndroid не является бесплатным.

gak 27.10.2010 01:52

ActiveAndroid теперь бесплатен и имеет открытый исходный код - pardom.github.com/ActiveAndroid

Michael Pardo 18.11.2012 00:49

Думал, что я просто добавлю сюда свои 0,02 доллара о моем Пакет ORMLite.

Это легкая замена Hibernate и использует собственные вызовы базы данных ОС Android для поддержки SQLite на Android. Он также поддерживает многие другие типы баз данных, использующие JDBC на других архитектурах. У нас есть Список рассылки Android для вопросов ORMLite.

Есть ли в ORMLite встроенная поддержка отношений (один | много) -к (многие | один)? Я не могу найти много информации об этом ... Если нет, то есть ли планы на это?

ferdystschenko 22.02.2011 09:35

Зависит от того, что вы подразумеваете под «поддержкой». Есть пример кода о том, как использовать «посторонние объекты», как вы работаете с «один ко многим», и есть примеры того, как использовать таблицы соединения для выполнения «многие ко многим» (ormlite.com/docs/examples). Отправьте сообщение в список пользователей с дополнительными вопросами (groups.google.com/group/ormlite-user).

Gray 23.02.2011 18:06

Выглядит неплохо, однако размер jar превышает 200 КБ против 18 КБ для ActiveAndroid. Я ничего не вставляю в свое приложение, неважно насколько оно хорошее, что увеличивает его размер на 40%.

Bostone 02.04.2011 23:27

Ага, конечно больше, чем ActiveAndroid. Конечно, гораздо больше функциональности. Также бесплатное программное обеспечение в отличие от лицензии AA. Но если ваша цель - размер, ORMLite не для вас.

Gray 02.04.2011 23:54

@Gray Ironic, так как он должен быть "Lite": P

Salman von Abbas 23.02.2013 10:05

Действительно @SalmanPK. Хотя есть разная степень lite. :-)

Gray 23.02.2013 17:25

@Gray, может, скажите, пожалуйста, как мы можем использовать IDR для импорта проекта Android ORMLite, я хочу расширить его для своего проекта

Ando Masahashi 27.09.2019 12:25

Я также ищу ORM на Android. Я тестировал ActiveAndroid, NeoDatis и db4o, и думаю, что воспользуюсь одним из двух последних.

NeoDatis и db4o действительно похожи, поэтому я хотел бы получить несколько советов, чтобы выбрать лучший. Кто-то использует один из них в своем проекте? Я буду использовать его как для бесплатного, так и для платного приложения, но похоже, что у них нет никаких лицензионных ограничений для Android.

Существует тест здесь, который, кажется, говорит, что NeoDatis быстрее, чем db4o, но я не знаю, можем ли мы основывать свое мнение на этом.

Db40 и NeoDatis - объектные базы данных, размер которых полностью запрещен для использования на Android.

Bostone 02.04.2011 23:25

@ DroidIn.net не могли бы вы предоставить ссылку, которая поддерживает ваш комментарий?

Sergio 14.03.2012 13:19

Мне понравился ActiveAndroid. Вроде написано специально для Android. Это кажется мне плюсом.

У меня есть некоторый опыт работы с Ruby on Rails, и если вам нравится способ ActiveRecord в Rails, вы можете очень быстро приступить к работе с этой библиотекой.

https://www.activeandroid.com/

Хорошая структура, но она конфликтует с библиотекой org.codehous.jackson, поэтому, если вы используете ее в своем проекте, вы не сможете использовать ActveAndroid.

endryha 14.03.2011 13:37

Как это конфликтует? Вы сообщили об этом как об ошибке в tracker.activeandroid.com?

Michael Pardo 16.05.2011 18:14

Может быть, взгляните на androrm.the-pixelpla.net, в нем есть большинство функций, и я бы сказал даже больше. Плюс: это бесплатно и с открытым исходным кодом.

philgiese 25.06.2011 16:30

Еще один новичок: android-active-record. Это очень легкий и простой в использовании фреймворк для Android, поддерживаемый SQLite. http://code.google.com/p/android-active-record/

Похоже, он все еще находится на ранней стадии разработки, но за ним стоит следить!

GWLlosa 18.11.2010 17:34

Пробовал - хорошее начало, но нужно много работать, чтобы быть готовым к прайм-тайму

Bostone 02.04.2011 23:28

https://github.com/ahmetalpbalkan/orman

Фреймворк Ормана может вам помочь. Он специально разработан для этого, очень маленький и полезный.

http://hadi.sourceforge.net

Этот инструмент очень прост и удобен в использовании.

Был негативный опыт работы с db4o (v. 8): индексация не работала должным образом (исключение и т. д.). Поэтому мне не удалось избежать создания дубликатов в сторонних таблицах при наличии объекта в структуре объекта. Более подробное объяснение в моем вопрос. Надеюсь, однажды будет лучше.

Если производительность и размер кода имеют значение, проверьте greenDAO. Я являюсь его автором, и моей мотивацией для создания другого ORM было избежать отражения в горячих точках. Оказалось, что greenDAO может быть до 4 раз быстрее ORMLite. За подробностями обращайтесь к страница функций.

Выглядит неплохо, но необходимость генерировать Дао для меня отпугивает :(

Chris.Jenkins 13.12.2011 18:56

Да, создание кода - это дополнительный шаг для разработчиков, но он значительно снижает производительность приложения. Результаты как начальной загрузки, так и анализа базы данных выполняются значительно быстрее. Другие инструменты полагаются на рефлексию, которая в Android очень медленная.

Markus Junginger 14.12.2011 23:45

Думаю, после повторного посещения (не так уж и усталого) я сразу бросился на это. Смотрится лучше, чем альтернативы. и им демонстративно все для скорости!

Chris.Jenkins 15.12.2011 20:33

Я использую greenDao в своих проектах, и мне это очень нравится.

mabac 22.02.2012 23:44

@greenrobot у вас есть несколько демонстраций "больших приложений", использующих вашу библиотеку?

StErMi 26.10.2012 17:35

@greenrobot поддерживает ли ваша библиотека отношения "многие ко многим"? Можем ли мы создать виртуальные таблицы для ускорения поиска? Включает ли он все функции, описанные на sqlite.org для базы данных sqlite?

Ashwin N Bhanushali 26.02.2013 12:46

@StErMi Path использует greenDAO. У них> 1 млн установок. См. github.com/greenrobot/greenDAO/issues/20#issuecomment-132789‌ 22

Markus Junginger 26.02.2013 16:27

Мммм действительно действительно интересно. Спасибо @greenrobot. На самом деле, если честно, я просто использую Gson и сохраняю его прямо в планшет. Каждая таблица имеет _id, json и список полей индекса (используемых для поиска).

StErMi 26.02.2013 18:01

Извлекает ли greenDAO отношения через соединения? Мы только что проверили OrmLite и были удивлены, увидев, что чужой @DatabaseField извлекается в отдельном запросе. Хуже того, при вызове dao.queryForAll возникает проблема N + 1; в случае 1000 элементов он получит элемент, затем выполнит 1000 запросов для поля отношения ...

Matthias 12.03.2013 18:15

Связи «один к одному» могут быть быстро решены с помощью одного запроса вместе с основным объектом. Найдите loadDeep / queryDeep в greendao-orm.com/documentation/relations. Отношения ко многим разрешаются с помощью одного запроса.

Markus Junginger 13.03.2013 13:28

Я думаю, что важно сказать, что greenDAO лучше совместим с ProGuard, чем ORMLite.

Renan Ferrari 21.05.2014 09:05

Нет поддержки Отношения "многие ко многим" - это большой провал

fire in the hole 15.10.2015 11:21

@Sheagorath, JDXA ORM для Android легко поддерживает моделирование сложных объектов, включая наследование, отношения один-к-одному, один-ко-многим и многие-ко-многим, и предлагает дружественную ненавязчивую модель программирования POJO (простые старые объекты Java), что не требует от вас изменения классов Java каким-либо образом: • Нет необходимости создавать подклассы классов вашей предметной области из какого-либо базового класса • Нет необходимости загромождать исходный код аннотациями • Нет необходимости в классах DAO • Нет генерации исходного кода

Damodar Periwal 12.11.2015 05:09

@Sheagorath greenDAO 2.0 поддерживает "многие ко многим"

Markus Junginger 13.11.2015 09:47

@greenrobot: да, но он глючит и непригоден для использования, см .: github.com/greenrobot/greenDAO/issues/249

fire in the hole 13.11.2015 15:21

Несмотря на то, что это старый пост, тема все еще актуальна. Поэтому хочу поделиться интересной статьей и хорошим подходом к решению большинства проблем, упомянутых в вопросе:

http://blog.codecentric.de/en/2011/04/android-persistence-accelerated-small-inhouse-orm/

Надеюсь, кто-нибудь найдет это таким же полезным, как и я!

Мой собственный DroidParts /http://droidparts.org/ только что достиг v0.5. Это библиотека DI / ORM и многое другое. Не так много документации, но включает образец приложения.

Может быть, добавление соответствующей документации - хорошая идея.

Subin Sebastian 23.11.2012 07:35

Этот вопрос не может устареть, но предлагаемые рамки могут. Итак, вот сначала список того, что я считаю важным в таких фреймворках для сравнения:

  • Есть ли артефакт Maven или Gradle? (это большой плюс в зависимости от того, используете ли вы maven или gradle, очевидно)
  • Доступен ли код простым способом, включая быстрый обзор коммитов для оценки активности? (код, размещенный на github, является для меня несомненным плюсом в этом отношении)
  • Управление релизами: есть ли для этого релизы / теги релизов и артефакты? (некоторые из них размещены на github и требуют либо git clone, либо предложения основного архива для загрузки - для меня большой минус, если даже теги выпуска не установлены и не адресованы в README)
  • поскольку размер имеет значение, я дал несколько подсказок, где это было легко (я ничего не загружал, поэтому в тех проектах, которые не предлагают артефактов выпуска, размеров нет)

А вот список фреймворков с примечаниями по вышеперечисленным пунктам. Я поискал еще несколько таких, как aBatis и Hadi, но добавил только те, которые имели некоторую активность после 2011 года.

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

РЕДАКТИРОВАТЬ (ноябрь 2013 г.): обновлен список до текущего статуса проектов. Некоторые из них добавили теги выпуска в свои репозитории на github, а также поддерживают Maven / Gradle. Хорошая работа!

РЕДАКТИРОВАТЬ (апрель 2015 г.): обновлен список, добавлены Sprinkles (согласно комментарию @AndroidGecko) и Realm.io.

Я настоятельно рекомендую использовать Realm, он работает очень быстро и плавно!

Crono 21.09.2018 16:38

Другие вопросы по теме