JAVAインタビューの質問の最新コレクション(10)

Hibernate

113.なぜHibernateを使用するのですか?

  • JDBCアクセスデータベースコードはカプセル化されているため、データアクセス層の面倒で反復的なコードが大幅に簡素化されます。

  • Hibernateは、JDBCと優れたORM実装に基づく主流の永続化フレームワークです。彼はDAOレイヤーのコーディングを大幅に簡素化しました

  • Hibernateは、透過性を実現するために、バイトコード拡張プログラムの代わりにJavaリフレクションメカニズムを使用します。

  • 軽量フレームワークであるため、Hibernateのパフォーマンスは非常に優れています。マッピングの柔軟性は優れています。1対1から多対多の複雑な関係まで、さまざまなリレーショナルデータベースをサポートします。

114. ORMフレームワークとは何ですか?

オブジェクト指向開発手法であるオブジェクトリレーショナルマッピング(ORM)は、今日のエンタープライズアプリケーション開発環境における主流の開発手法であり、リレーショナルデータベースは、エンタープライズアプリケーション環境における永続的なデータストレージのための主流のデータストレージシステムです。オブジェクトとリレーショナルデータは、ビジネスエンティティの2つの表現です。ビジネスエンティティは、メモリ内のオブジェクトとデータベース内のリレーショナルデータとして表されます。メモリ内のオブジェクト間には関連付けと継承関係がありますが、データベースでは、リレーショナルデータは多対多の関連付けと継承関係を直接表現することはできません。したがって、オブジェクトリレーショナルマッピング(ORM)システムは、一般にミドルウェアの形式で存在し、主にプログラムオブジェクトのリレーショナルデータベースデータへのマッピングを実現します。

115. Hibernateのコンソールで印刷されたSQLステートメントを表示するにはどうすればよいですか?

参照:Hibernateのコンソールで印刷されたSQLステートメントを表示する

116. hibernateにはいくつのクエリメソッドがありますか?

  • hqlクエリ

  • SQLクエリ

  • 条件付きクエリ

hql查询,sql查询,条件查询

HQL:  Hibernate Query Language. 面向对象的写法:
Query query = session.createQuery("from Customer where name = ?");
query.setParameter(0, "苍老师");
Query.list();



QBC:  Query By Criteria.(条件查询)
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.eq("name", "花姐"));
List<Customer> list = criteria.list();



SQL:
SQLQuery query = session.createSQLQuery("select * from customer");
List<Object[]> list = query.list();

SQLQuery query = session.createSQLQuery("select * from customer");
query.addEntity(Customer.class);
List<Customer> list = query.list();



Hql: 具体分类
1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数



HQL和SQL的区别

HQL是面向对象查询操作的,SQL是结构化查询语言 是面向数据库表结构的

117.休止状態のエンティティクラスをfinalとして定義できますか?

Hibernateのエンティティクラスは最終クラスとして定義できますが、このアプローチは適切ではありません。アソシエーションが遅延した場合、Hibernateはプロキシモードを使用してパフォーマンスを向上させるため、エンティティクラスを最終クラスとして定義すると、Javaでは最終クラスの拡張が許可されないため、Hibernateはプロキシを使用できなくなります。パフォーマンスを向上させることができるメソッドの使用を制限します。ただし、永続クラスがインターフェイスを実装し、インターフェイスのエンティティクラスで定義されているすべてのパブリックメソッドを宣言する場合は、上記の悪影響を回避する必要があります。

118.休止状態でのマッピングにIntegerとintを使用することの違いは何ですか?

Hibernateでは、OIDが整数型として定義されている場合、Hibernateはその値がnullかどうかに基づいて、オブジェクトが一時的であるかどうかを判断できます。OIDがint型として定義されている場合は、未保存を設定する必要もあります。 hbmマッピングファイル。value属性は0です。

119. Hibernateはどのように機能しますか?

Hibernateの仕組み:

  • 構成を通じてconfig = new Configuration()。configure(); //hibernate.cfg.xml構成ファイルを読み取って解析します
  • hibernate.cfg.xmlの<mappingresource = "com / xx / User.hbm.xml" />を使用して、マッピング情報を読み取り、解析します
  • SessionFactoryを介してsf = config.buildSessionFactory(); // SessionFactoryを作成します
  • セッションsession = sf.openSession(); //打開セッション
  • トランザクションtx = session.beginTransaction(); //トランザクショントランザクションを作成して開始します
  • 永続的な操作操作データ、永続的な操作
  • tx.commit(); //トランザクションをコミットする
  • セッションを閉じる
  • SesstionFactoryを閉じる

120. get()とload()の違いは?

  • load()がオブジェクトの他のプロパティを使用しない場合、SQL遅延読み込みはありません

  • get()がオブジェクトの他のプロパティを使用しない場合、SQLも生成され、すぐにロードされます

121.Hibernateのキャッシュメカニズムについて教えてください。

Hibernateのキャッシュは、第1レベルのキャッシュと第2レベルのキャッシュに分けられます。

第1レベルのキャッシュはセッションレベルのキャッシュであり、トランザクションの範囲内で有効であり、組み込みキャッシュをアンインストールすることはできません。2番目のレベルのキャッシュはSesionFactoryレベルのキャッシュであり、アプリケーションの開始からアプリケーションの終了まで有効です。これはオプションであり、デフォルトでは第2レベルのキャッシュはなく、手動でオンにする必要があります。データベースを保存した後、キャッシュはコピーをメモリに保存し、データベースが更新されると、同期的に更新されます。

第2レベルのキャッシュに保存するのに適したデータの種類は何ですか?

  • めったに変更されないデータ投稿の最終返信時間
  • 頻繁に照会されるデータのeコマースの場所
  • あまり重要ではないデータであり、時折同時データを許可します
  • 同時にアクセスされないデータ
  • 定数データ

拡張:hibernateの第2レベルのキャッシュは、デフォルトで分散キャッシュをサポートしていません。memcaheやredisなどの中央キャッシュを使用してセカンダリキャッシュを置き換えます。

122.休止状態のオブジェクトのステータスは何ですか?

休止状態のオブジェクトには、次の3つの状態があります。

  • 一時的(一時的):オブジェクトが出てきたばかりで、IDがまだ設定されておらず、他の値が設定されています。

  • 永続的(永続的):save()、saveOrUpdate()を呼び出すと、idで永続的になります。

  • Detached:セッションclose()が終了すると、Detachedになります。

ここに画像の説明を挿入

123.休止状態のgetCurrentSessionとopenSessionの違いは何ですか?

openSessionは文字通り見ることができ、新しいセッションオブジェクトを開くことであり、使用するたびに新しいセッションを開くことです。複数回使用する場合、取得したセッションは同じオブジェクトではないため、メソッドを使用した後にcloseを呼び出して閉じる必要があります。セッション。

getCurrentSessionは、文字通り、現在のコンテキストでセッションオブジェクトを取得することです。このメソッドを初めて使用すると、セッションオブジェクトが自動的に生成され、連続して複数回使用すると、取得したセッションは同じオブジェクトになります。 。これはopenSessionとの違いの1つです。簡単に言えば、getCurrentSessionは次のとおりです。使用されているものがある場合は古いものを使用し、使用されていない場合は新しいものを作成します。

注:実際の開発では、一般に同じトランザクションが処理されるため(つまり、データベースを使用する場合)、getCurrentSessionがより多く使用されることがよくあります。したがって、一般に、openSessionはあまり使用されないか、openSessionは古いインターフェイスのセットです。

124.休止状態のエンティティクラスにはパラメータのないコンストラクタが必要ですか?どうして?

これは、Hibernateフレームワークがこのデフォルトコンストラクターを呼び出してインスタンスオブジェクト、つまりClassクラスのnewInstanceメソッドを構築するためである必要があります。このメソッドは、デフォルトコンストラクターを呼び出すことによってインスタンスオブジェクトを作成します。

また、構築方法を指定しない場合、仮想マシンはデフォルトの構築方法(パラメーターなしのコンストラクター)を自動的に提供しますが、他の構築方法にパラメーターを指定すると、仮想マシンはデフォルトの構築方法を提供しなくなります。 。この時点で、コードにパラメーターなしのコンストラクターを手動で記述する必要があります。そうしないと、new Xxxx()がエラーを報告するため、デフォルトのコンストラクターは必要ありません。複数のコンストラクターがある場合にのみ必要です。ここでは「Must」です。 「手動で作成する必要がある」という意味です。

おすすめ

転載: blog.csdn.net/weixin_42120561/article/details/114936898