Будут ли в Java-программах hibernate нет кода sql? - PullRequest
5 голосов
/ 11 июня 2010

Я не работал с Hibernate. У меня немного опыта в Java. Я изучал источник Java-приложения, созданного Oracle (Retail Price Management). Я ожидал много встроенного SQL-кода, поскольку приложение интенсивно использует базу данных. Но, к моему удивлению, нет встроенного кода SQL! до сих пор. Я обнаружил, что он использует то, что называется «Hibernate» из множества .hbm.xml файлов. Это торговая марка для программ Java, использующих Hibernate, или, может быть, я не видел полную кодовую базу? Может ли кто-нибудь просветить меня, как это возможно? Благодаря.

Ответы [ 5 ]

2 голосов
/ 11 июня 2010

Hibernate, как и все инструменты ORM, действительно уменьшает или устраняет необходимость использовать необработанный SQL в коде Java из-за следующего:

  • многие ассоциации между различными объектами записаны в отображении Hibernate, поэтому они автоматически выбираются Hibernate - т.е. если у вас есть отношение агрегации между двумя классами на стороне Java, это может быть отображено как отношение внешнего ключа в БД и Hibernate при загрузке экземпляра класса A может автоматически загружать также связанные экземпляры класса B,
  • многие запросы можно выполнить на собственном языке запросов HQL Hibernate или с помощью API Criteria.

Под капотом Hibernate генерирует SQL для связи с БД, но это не видно на стороне Java. Хотя это можно увидеть в журналах, если он включен.

В связи с этим программы, использующие Hibernate, очень редко нуждаются в непосредственном использовании JDBC или SQL. Исключения обычно переходят в «хитрые» унаследованные схемы БД, которые не могут быть полностью обработаны Hibernate.

1 голос
/ 11 июня 2010

Hibernate - это инструмент или технология, которая заботится о взаимодействии базы данных и приложения для вас. Вы должны указать структуру приложения и базы данных, это то, что находится в файлах .hbm.xml.

SQL генерируется Hibernate во время выполнения (вид)

Допустим, у вас есть класс Fruit, и объекты этого объекта сохраняются в таблице T_FRUIT.

Вы говорите это в спящий режим через файлы .hbm.xml. Что существует таблица T_FRUIT, эта таблица представлена ​​классом Fruit и какие поля в классе Fruit соответствуют каким столбцам в таблице T_FRUIT.

И затем он знает, что когда вы пытаетесь сохранить фрукт, он должен вставить / обновить таблицу T_FRUIT.

Когда вы хотите создать яблоко, вы создаете объект из фруктов, соответствующий яблоку, и сохраняете «сохранить этот фрукт». Hibernate заботится о сохранении этого.

У вас могут быть определенные отношения между таблицами, и Hibernate достаточно умен, чтобы сохраняться в нескольких таблицах.

Когда вы выбираете фрукт, hibernate извлекает информацию о фрукте и его потомках (данные из справочных таблиц). И вы можете сказать, хотите ли вы привести всех детей сразу или как и когда требуется .

И так далее. Цель состоит в том, чтобы сделать вашу жизнь проще, а код обслуживаемым, легко читаемым, переносимым, ...

С этой информацией позвольте мне перенаправить вас .

1 голос
/ 11 июня 2010

Hibernate генерирует SQL для всех своих стандартных операций с базой данных. Он понимает различные диалекты SQL, и файлы сопоставления (.hbm.xml) рассказывают ему о структуре базы данных, поэтому он знает, как создавать свои запросы. Существует параметр showSql, который можно включить, если вы хотите, чтобы он выводил сгенерированный SQL во время работы.

1 голос
/ 11 июня 2010

Hibernate - объектно-реляционный картограф (ORM).ORM используются, чтобы скрыть неприятные детали несовместимости SQL [sic] между базами данных в вашей программе - вы определяете свои таблицы и сопоставляете их с иерархией объектов (файлы .hbm.xml), а затем Hibernate делает все остальное.Таким образом, большинство программ, использующих Hibernate, не увидят ни одной фразы SQL, если только нет особой причины для выполнения сложного запроса.

1 голос
/ 11 июня 2010

Потому что в этом и заключается цель использования Hibernate или любой другой инфраструктуры объектно-реляционного отображения.

Hibernate решает проблемы несоответствия объектно-реляционного импеданса, заменяя прямые обращения к базе данных, связанные с постоянством, высокоуровневыми функциями обработки объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...