В Hibernate есть синтаксис запросов HQL. Но то, с чем мы больше знакомы, - это подсчет утверждений SQL. Итак, как мы должны сделать Hibernate поддержку SQL? Нам не нужно учитывать это, команда Hibernate уже сделала это.
Давайте не будем говорить о чушь, просто возьмите пример.
Выберите * из t_user usr
Выше приведено заявление SQL, и это чепуха, которую все знают. Что мы должны делать, если Hibernate хочет выполнить этот оператор? Посмотрите на код:
Query Query = session.createSqlQuery ("select * from t_user usr"); Вот и все, каждый должен знать, что осталось, и что происходит на запросах, нормы.
Тогда что возвращается после запроса?
while (iter.hasnext ()) {object [] objs = (object []) iter.next (); for (int i = 0; i <objs.length; i ++) {System.out.print (objs [i]); } System.out.println (); } Каждый возвращаемый результат является массивом объекта [].
В настоящее время кто-то вышел и сказал, что это объектно ориентирован. Да, это объектно-ориентированное, увы, нет никакого пути.
Давайте продолжим смотреть:
Выберите {usr.*} от t_user usr Видя это, я думаю, некоторые детские ботинки начинают двигаться. Что за скобки?
Не волнуйся, не торопись. Давайте сначала продолжим читать код.
Кода -копия выглядит следующим образом:
Query Query = session.createSqlQuery ("select {usr.*} Из t_user usr"). Addentity (tuser.class);
AddentitySqlQuery Addentity (String TableAs, Class EntityType) Объявляет «корневые» EntityParameters: Tablealias - Table AliasetityType - тип Java, чтобы добавить в качестве корня
Это так же, как и есть, это легкая отстой. Вы можете использовать его только самостоятельно.
Первый параметр относится к псевдониму таблицы. Так же, как приведенное выше утверждение, псевдоним нашей таблицы - USR, поэтому первый параметр - USR, а второй относится к тому, к какому классу необходимо отображать результаты запроса. Здесь, поскольку мы сопоставляем таблицу T_USER через TUSER в файле отображения, мы, конечно, здесь. Затем после проверки есть операторы SQL, и результат - тип Tuser.
Результаты, которые мы обнаружили:
org.hibernate.tutorial.domain6.tuser@198cb3d
Конечно, ваш должен отличаться от моего. Не двигайте курицу.
Может быть, нам не нужно выяснять все, в настоящее время все, что нам нужно, это установить псевдоним:
Выберите u.id как {usr.id}, u.name as {usr.name}, u.age as {usr.age} из t_user u Мы видим, что мы использовали, чтобы указать псевдоним для этой области, и то же самое верно в программе:
Кода -копия выглядит следующим образом:
Query Query = session.createSqlQuery ("Select u.id as {usr.id}, u.name as {usr.name}, u.age as {usr.age} от t_user u"). Дополнение ("usr", tuser.class);
<sql-query name = "Querytuser"> <return alias = "usr" entity-name = "org.hibernate.tutorial.domain6.tuser" /> select {usr.*} из t_user usr, где name =: name < /sql-query> Обратите внимание, что имени объекта здесь должно быть написано с помощью полного имени пакета, в противном случае будет сообщена ошибка. Здесь у нас есть возврат подзаголовок, который указывает псевдоним и название класса таблицы, так что нам не нужно добавить в среду выполнения.
Посмотрите на код:
Query Query = session.getNamedQuery ("QueryTuser"); Query.setParameter ("name", "Shun"); Список списка = Query.list (); Iterator iter = list.iterator ();
Мы в порядке. Обратите внимание, что мы не добавили дополнения, в основном из -за конфигурации в файле конфигурации.
Обратите внимание, что, если он настроен в файле конфигурации, вы должны иметь возвратный подтэг, чтобы указать псевдоним таблицы и имя класса. Это в основном избегает повторяющихся суждений при чтении заявлений.
После того, как мы говорили об этом так долго, мы говорили о столах со псевдонимом. Итак, что мы должны делать, если у нашей таблицы нет псевдонима, но мы хотим инкапсулировать результат в объект?
Выберите * из t_user usr
Это очень просто. Просто вызовите перегруженный метод Addentity Addentity (класс Clazz), и вам нужно только дать имя класса, без псевдоним таблицы.
Конечно, Hibernate также поддерживает сохраненные процедуры. Вам нужно только установить свойство Callable SQL-Query в True в файле конфигурации, чтобы указать, что в настоящее время называемые хранимые процедуры. Поскольку у меня мало контактов с хранимыми процедурами, я буду изучать их в будущем, а затем изучать их с вами.
Когда мы называем соответствующие методы операций данных, такие как Session.Save, он будет преобразован в встроенный оператор SQL Hibernate, но что, если мы хотим самостоятельно контролировать формат оператора SQL?
Смпания и на самом деле думал об этом тоже.
Мы напрямую добавляем его в файл отображения:
<sql-insert> вставьте в значения t_user (name, age) (?,?) Где user_id =? </sql-update>
Обратите внимание, что это необходимо добавить в тег класса в качестве субтитра. Мы все заглавные буквы здесь, чтобы отличить их от заявлений о по умолчании Hibernate и не иметь другого значения.
Давайте сначала посмотрим на звонок, чтобы вставить:
Пользователь пользователь = новый пользователь (); user.setname ("shun123123"); user.setage (23); Когда мы называем сохранение, оператор Hibernate:
С Worderate:
Вставьте в значения пользователя (user_name, возраст) (?,?)
Он вызывает операторы в теге SQL-Insert, который мы настроили, давайте посмотрим на вызов для обновления:
Пользователь пользователь = (пользователь) session.get (user.class, new Long (29)); user.setname ("shun123123"); user.setage (23); session.save (пользователь); Мы называем сохранение, он автоматически вызовет обновление, а оператор в настоящее время:
С Worderate:
Обновить пользователь set user_name =?, Age =? Где user_id =?Мы видим, что выводный оператор используется, что означает, что нами настроенный утверждение называется.