学習ログ--2019 / 8月24日

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/weixin_44757417/article/details/100051545

フェッチ戦略(最適化)を休止

負荷の遅延は何ですか

遅延ロード:遅延(遅延ロード)。文がクエリに送信されていないときに実行するコードの行、オブジェクトのプロパティは、実際にこの時間を使用するには、クエリにSQL文を送信します。

分類の遅延読み込み

  • クラスレベル遅延ロード
    • これは、遅延を採用するかどうか、ロード時間によってオブジェクトのqueryメソッドを指します。たSession.load(Customer.class、1リットル)。
    • 障害が怠惰にする場合は、クラスレベルの遅延ロードは、上の怠惰で構成されています
      • falseに怠惰なセット
      • 変更され、最終的に使用して永続クラス
      • 休止状態。初期化()
@Test
	/**
	 * 类级别的延迟加载
	 * * 在<class>的标签上配置的lazy
	 */
	public void demo01() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction transaction = session.beginTransaction();
		
		Customer customer = session.load(Customer.class, 1l);
		Hibernate.initialize(customer);//发语句
		
		transaction.commit();
	}
  • アソシエイトレベルの遅延読み込み
    • クエリが遅延ロードを使用しているかどうか、その関連する時間オブジェクト、クエリ時間内のオブジェクトを指します。
Customer customer = session.get(Customer.class,1l);

customer.getLinkMans();顧客の連絡先、連絡先を介して得られる場合----、オブジェクトは遅延ロードを使用するかどうか、遅延の関連するレベルと呼ばれます。

  • フェッチ戦略は、多くの場合、文を最適化し、遅延ロードと一緒に関連付けられているレベルを使用します。

フェッチ戦略

概要戦略クロール
  • 関連するオブジェクトにオブジェクトを把握することで、あなたがSQL文を送信する必要があり、SQLステートメントは、送信する方法を、フォーマットの種類がポリシーによって設定されているに送ります。
    • フェッチまたは属性によって設定されています
    • これらのラベルの上にどのように怠惰を取得し、最適化を送られたSQL文を設定します
  • フェッチとの怠惰
    • フェッチ:フェッチ戦略、制御SQL文のフォーマット
      • 選択:デフォルトのクエリに関連するオブジェクト、通常のselect文を送信
      • 参加:押すと左の外側には、クエリに関連するオブジェクトに参加送ります
      • 副選択:その関連オブジェクトでサブクエリを送ります
    • 遅延:遅延読み込み、関連するオブジェクトかどうか遅延を用いて制御クエリー
      • 真:遅延ロードを使用している場合、クエリオブジェクトに関連付けられたデフォルト値
      • 偽:クエリに関連するオブジェクトは、遅延ロードを使用しない場合
      • エクストラ:その怠惰。
    • 実際の開発では、一般的には、デフォルト値を使用します。あなたは特別なニーズを持っている場合は、参加を設定する必要があるかもしれません。
フェッチとの怠惰
  • フェッチ:戦略、制御SQL文の形式を取得します。
    • 選択:デフォルトクエリオブジェクトに関連付けられた通常のSELECT文を送ります。
    • 参加:参加押すと左の外側を送信します。
  • 遅延:遅延ロード、制御クエリは遅延を採用するかどうかのオブジェクトが関連付けられているとき。
    • プロキシ:デフォルト、プロキシ特定の値、もう一方の端に怠け者の値に応じて。
    • 偽:関連するオブジェクトは、クエリ、遅延を使用しないでください。
    • 無プロキシ:(を使用しないことはありません)
  • 実際の開発では、一般的には、デフォルト値を使用します。あなたは特別なニーズを持っている場合は、参加を設定する必要があるかもしれません。
バッチフェッチ
  • バッチフェッチとは何ですか
  • 関連オブジェクトの数、バッチサイズとクロール
  • テスト:
package HibernateDemo02;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import HibernateDemo01.Customer;
import HibernateDemo01.LinkMan;
import hibernate.utils.HibernateUtils;
/**
 * * 批量抓取
 * @author Administrator
 *
 */
public class HibrenateDemo02 {
	
	@Test 
	/**
	 * *获取客户的时候,批量抓取联系人
	 */
	public void demo01() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction transaction = session.beginTransaction();
		
		List<Customer> list = session.createQuery("from Customer").list();
		for (Customer customer : list) {
			System.out.println(customer.getCust_name());
			for (LinkMan linkMan : customer.getLinkMans()) {
				System.out.println(linkMan.getLkm_name() );
			}
				
		}
		
		
		transaction.commit();
	}
	@SuppressWarnings("unchecked")
	@Test
	/**
	 * * 获取联系人的时候,批量抓取客户
	 * *在Customer。hbm.xml中<class>上配置batch-size="4"
	 */
	public void demo02() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction transaction = session.beginTransaction();
		
		List<LinkMan> list = session.createQuery("from LinkMan").list();
		for (LinkMan linkMan : list) {
			System.out.println(linkMan.getLkm_name());
			System.out.println(linkMan.getCustomer().getCust_name());
		}
		
		transaction.commit();
	}
}

おすすめ

転載: blog.csdn.net/weixin_44757417/article/details/100051545