2012-06-02 2 views
1

Я разрабатываю веб-приложение в Java. Я думаю использовать Spring MVC. Но на стороне ORM у меня есть решение сделать. Я изучил ORM как Hibernate, iBatis, Spring JDBC Template и т. Д.Hibernate, iBatis, Spring JDBC Template, какой из них использовать?

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

В Hibernate вы сопоставляете каждую таблицу с классом. Это уменьшает необходимость записи SQL.

Я думаю, что Hibernate предпочтительнее, когда вы плохо разбираетесь в SQL. В моем случае я вполне комфортно в SQL, поэтому хочу использовать шаблон iBatis или Spring JDBC, который даст мне хороший контроль над SQL, и они менее сложны чем Hibernate.

Но Hibernate обеспечивает кэширование, которое другие ORM не предоставляют.

Так мои вопросы:

  1. Какой использовать между Ibatis и Spring JDBC шаблона?
  2. Является ли кэширование Hibernate (или любой другой функцией Hibernate, которую я не знаю) настолько хорошо, что я должен идти с Hibernate вместо других ORM?
+0

Кэширование может быть независимым от технологии ORM. –

ответ

5

Я думаю, Hibernate является предпочтительным, когда вы не очень хорошо в SQL

Я не согласен с идеей, что вы должны использовать Hibernate или любой другой ORM, потому что вы не очень хорошо на SQL ,

Хотя это правда, что Hibernate будет генерировать ваш SQL для вас, а не понимать, что он делает, это рецепт катастрофы производительности.

0

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

Являюсь пользователем myBatis и считаю, что это в середине пути и предоставляет все, что вам нужно. Ну, myBatis будет моим личным выбором по шаблону Spring JDBC.

2

Как разработчик Hibernate, я тоже хорошо разбираюсь в SQL;) Фактически, начало моей карьеры работало исключительно с реляционными (и даже с некоторыми реляционными) базами данных. Во всяком случае, я действительно не понимаю это неправильное представление о том, что письмо, написанное SQL, «более обслуживаемо» или дает «лучший контроль». Но если вы купите это неправильное представление, вы можете фактически сказать Hibernate SQL, который вы хотите использовать для всех операций CRUD, относящихся к каждому объекту (см. @SQLInsert, @SQLUpdate и т. Д.).

Опять же, я нахожу, что это почти не поддерживается. Лично я бы предпочел, чтобы Hibernate управлял INSERT/UPDATE/DELETE SQL для меня. Загрузка данных с другой стороны - это ситуация, когда я обычно хочу немного больше контролировать. Но Hibernate (и поставщики JPA в целом) уже дают вам такой контроль через запросы HQL/JPQL и Criteria. На мой взгляд, если вы полагаетесь на Session.get, вы просто просите о плохой производительности. И это не имеет никакого отношения к использованию O/RM. Это не очень хороший план загрузки данных, потому что объем данных, которые вам нужны (даже связанные с одним и тем же объектом), различен на основе использования приложения.Например, для загрузки Employees для раскрывающегося списка требуется много разных данных для создания реестров ведомств. И это контроль.

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

Кэширование - это справедливая точка относительно O/RM. Фактически JPA (начиная с версии 2.0) требует некоторого уровня кэширования. Однако имейте в виду, что кеширование на уровне O/RM часто приводит к ухудшению производительности. Вам действительно нужно понять семантику конкретных данных, которые вы хотели бы кэшировать. Некоторые данные являются хорошим кандидатом для кэширования, некоторые - нет. Кроме того, гораздо лучше кэшировать «выше» уровня O/RM.

Лично я бы выбрал Hibernate, потому что я верю (1), он поражает лучший баланс между абстракцией, все еще предоставляя доступ к силе SQL (это в основном относится к поставщикам JPA в целом) и (2) имеет самую полную функцию набор любого поставщика устойчивости.

+0

Отличные очки! Просто подумал поделиться интервью Гавен Кинг несколькими годами ранее, где он рассказал об этих моментах - http://www.javaperformancetuning.com/news/interview041.shtml – Shailendra

Смежные вопросы