Основное исследование в этой статье
Концепция ленивого : загрузите объект только тогда, когда он фактически используется.
Ленивая стратегия Hibernate может быть использована в:
1. На теге <Class> значение можно принять: true/false.
2. На теге <свойства> значение можно принять: true/false, и инструмент улучшения класса необходим для изменения байт -кода (это не имеет большого смысла).
3. В тегах <Set> и <sist> значения можно взять: true/false/extra.
4. На одноместных тегах ассоциации <много-один-одно
Давайте посмотрим на ленивый на теге класса:
User.java:
Пользователь открытого класса {/ * id */private int id;/ * Имя пользователя */private String name;/ * Пароль пользователя */Private String Password;/ * Время создания */private Date CreateTime; // Опустить методы установки и getter}User.hbm.xml:
<? xml version = "1.0"?> <! Doctype Hibernate Mapping Public "-// Hibernate/Hibernate Mapping Dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-Пакет. package = "com.lixue.bean"> <!-Имя узла класса представляет собой имя класса объекта, а таблица представляет имя объекта, отображаемое в таблице в базе данных-> <class name = "table" table = "t_user" lazy = "true"> <id name = "id"> <generator /> < /id> <! name = "password" /> <name = "createTime" /> < /class> < /hibernate mapping>
Метод испытаний:
public void testload1 () {/*Получить пользователь, сама загрузка поддерживает ленивую загрузку (тег класса Lazy действителен для обычных свойств)*/user user = (user) hibernateutils.getsession (). Загрузка (user.class, 1);/*не выпускает sql (потому что идентификатор указан, когда вы запросите, вам не нужно проверять его снова)*/system.out. user.getid ());/* выпустит SQL, поскольку атрибуты действительно необходимы в настоящее время, будет выпущено оператор SQL, а выпущенный оператор найдет все атрибуты, а в следующих атрибутах не будут выпускать операторы*/system.out.println ("user.name =" + user.getName ();/********************** имя)*/system.out.println ("user.password =" + user.getpassword ());/*не выдает sql (это было обнаружено при проверке имени)*/system.out.println ("user.createtime =" + user.getCreatetime ());}; Попробуйте точку останова в User user = (User) HibernateUtils.getSession().load(User.class, 1); Для тестирования!
Объект будет отображаться в пользователе объекта-> Хэндлер ---> Целевой узел, как показано на рисунке:
1. В начале цель ноль. Когда user.getId() выполняется, он все еще остается нулевым, потому что идентификатор уже указан при запросе, поэтому в настоящее время не имеет смысла запросить.
2. При выполнении user.getName() выпущен оператор, как показано на рисунке:
Из рисунка мы видим, что при запросе идентификатора не было выпущено никаких заявлений. Как мы только что упоминали, когда мы запросим атрибут «Имя», мы выпускаем оператор, и функция этого утверждения заключается в том, чтобы запросить все атрибуты.
3. Когда user.getPassword() и user.getCreateTime() выполняется, оператор больше не будет выдаваться, поскольку значение атрибута было запрошено ранее.
Примечание: ленивый на теге <Class> только поддерживает нормальные атрибуты и не повлияет на загрузку коллекций в классе.
Вышеуказанное все о ленивом на теге <class> Lazy Lazy Lazy, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!