この記事の主な研究は次のとおりです
Lazyの概念:実際に使用されている場合にのみオブジェクトをロードします。
Hibernateの怠zyな戦略は以下で使用できます。
1。<class>タグでは、値を取ることができます:true/false。
2。<property>タグでは、値を取得できます:true/false、およびバイトコードを変更するにはクラスの拡張ツールが必要です(これはあまり意味がありません)。
3。<set>および<list>タグで、値を取得できます:true/false/extra。
4。<bulse-one>および<One-One>のシングルエンドの関連付けタグでは、値を取得できます:false/proxy/nophy
クラスの怠zyなタグを見てみましょう。
user.java:
パブリッククラスユーザー{/ * id */private int id;/ *ユーザー名 */プライベート文字列名;/ *ユーザーパスワード */プライベート文字列パスワード;/ *作成時間 */private date createTime; // omit setter and getterメソッド}user.hbm.xml:
<?xml version = "1.0"?> <!doctype hibernate-mapping public " - // hibernate/hibernateマッピングDTD 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapting-3.0.dtd"> <! package = "com.lixue.bean"> <! - クラスノードの名前はエンティティのクラス名を表し、テーブルはデータベースのテーブルにマッピングされたエンティティの名前を表します - > <クラス名= "ユーザー"テーブル= "t_user" lazy = "true"> <id name = "id"> name = "password" /> <プロパティname = "createTime" /> < /class> < /hibernate-mapping>
テスト方法:
public void testload1(){/*ユーザーを取得し、ロード自体は怠zyなロードをサポートします(クラスタグ怠lazyは通常のプロパティに有効です)*/ユーザーユーザー=(ユーザー)hibernateutils.getSession()。 user.getId());/*はSQLを発行します。この時点で属性が本当に必要であり、SQLステートメントが発行され、発行されたステートメントはすべての属性を見つけ、その後の属性は発行しません*/system.out.println( "user.name =" + user.getName(); name)*/system.out.println( "user.password =" + user.getPassWord());/*はsqlを発行しません(名前をチェックするときに発見されました) User user = (User) HibernateUtils.getSession().load(User.class, 1);テスト用!
オブジェクトは、図に示すように、オブジェクトユーザー - >ハンドラー - >ターゲットノードに表示されます。
1。最初は、ターゲットはヌルです。 user.getId()が実行された場合、それはまだnullです。なぜなら、私たちがクエリするときにIDが既に指定されているため、この時点で照会することは無意味です。
2。user.getName user.getName()を実行すると、図に示すようにステートメントが発行されます。
図から、IDをクエリするときにステートメントが発行されなかったことがわかります。先ほど述べたように、名前属性を照会すると、ステートメントを発行します。このステートメントの機能は、すべての属性を照会することです。
3. user.getPassword()およびuser.getCreateTime()が実行されると、属性値が以前にクエリになったため、ステートメントは発行されなくなります。
注:Lazy on <class>タグは、通常の属性のみをサポートし、クラス内のコレクションの負荷に影響しません。
上記は、散ら葉の怠zyなロードの<class>タグについて怠zyについてです。誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!