国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&面接の質(zhì)問 Java 永続層の面接での質(zhì)問

Java 永続層の面接での質(zhì)問

Dec 10, 2019 pm 02:41 PM
java

Java 永続層の面接での質(zhì)問

ORM とは何ですか? (推奨される學(xué)習(xí): java インタビューの質(zhì)問 )

オブジェクト リレーショナル マッピング (オブジェクト リレーショナル マッピング、略して ORM) は、オブジェクト指向の問題を解決するために使用されるリレーショナル モデルです。プログラムとデータベースのモデル 不一致問題に対するテクノロジー;

簡単に言うと、ORM は、オブジェクトとデータベース (Java では XML または注釈を使用できます) の間のマッピングを記述するメタデータを使用して、プログラム內(nèi)のオブジェクトを自動的に永続化します。リレーショナル データベースに変換するか、リレーショナル データベース テーブル內(nèi)の行を Java オブジェクトに変換します。これは本質(zhì)的にデータをある形式から別の形式に変換することです。

Hibernate の SessionFactory はスレッドセーフですか?セッションはスレッドセーフですか (2 つのスレッドが同じセッションを共有できますか)?

SessionFactory は Hibernate のデータ ストレージ概念に対応しており、スレッドセーフであり、複數(shù)のスレッドから同時にアクセスできます。通常、SessionFactory は起動時にのみ構(gòu)築されます。アプリケーションの場合、簡単にアクセスできるように、シングルトン モードで SessionFactory をカプセル化するのが最善です。

Session は軽量の非スレッドセーフ オブジェクト (セッションはスレッド間で共有できません) であり、データベースと対話する作業(yè)単位を表します。セッションは SessionFactory によって作成され、タスクが完了すると閉じられます。セッションは、永続化レイヤー サービスによって提供されるメイン インターフェイスです。

セッションにより、データベース接続の取得が遅れます (つまり、必要な場合にのみ接続が取得されます)。作成されるセッションが多すぎることを避けるために、ThreadLocal を使用してセッションを現(xiàn)在のスレッドにバインドし、同じスレッドが常に同じセッションを取得できるようにします。

Hibernate 3 の SessionFactory の getCurrentSession() メソッドでこれを行うことができます。

Session の save()、update()、merge()、lock()、saveOrUpdate()、persist() メソッドは何をしますか?違いは何ですか?

Hibernate オブジェクトには、一時的、永続的、切り離されたという 3 つの狀態(tài)があります。

一時的なインスタンスは、save()、persist()、または saveOrUpdate() メソッドを呼び出すことで永続化できます。

無料インスタンスは、update()、saveOrUpdate()、lock を呼び出すことで永続化できます。 () または replicate() は永続的になります。 save() とpersist() は SQL INSERT ステートメントをトリガーし、update() または merge() は UPDATE ステートメントをトリガーします。

save() と update() の違いは、一方は一時オブジェクトを永続狀態(tài)に変換し、他方は自由オブジェクトを永続狀態(tài)に変換することです。 merge() メソッドは、save() メソッドと update() メソッドの機能を完了できます。その目的は、新しい狀態(tài)を既存の永続オブジェクトにマージするか、新しい永続オブジェクトを作成することです。

persist() メソッドについては、公式ドキュメントの指示に従ってください:

1.persist() メソッドは一時的なインスタンスを永続化しますが、識別は保証されません識別子はすぐに永続インスタンスに入力され、識別子の入力はフラッシュ時間まで遅れる場合があります;

2.persist() メソッドは、呼び出されたときにトリガーされないことを保証します。トランザクションの外部。INSERT ステートメントが長いセッション プロセスをカプセル化する必要がある場合、persist() メソッドが必要です。

3. save() メソッドは項目 2 を保証しません。識別子を返す必要があるため、 INSERT ステートメントは、トランザクションの內(nèi)部または外部に関係なく、すぐに実行されます。

lock() メソッドと update() メソッドの違いについては、update() メソッドはデタッチ狀態(tài)で変更されたオブジェクトを永続狀態(tài)に変更し、lock() メソッドは変更します。変更されていないオブジェクト 切り離された狀態(tài)のオブジェクトは永続的な狀態(tài)になります。

セッションごとにエンティティ オブジェクトを読み込むプロセスについて説明します。

1. データベース クエリ関數(shù)を呼び出す前に、Session は最初に 1 次キャッシュ內(nèi)のエンティティ タイプと主キーを検索します。1 次キャッシュの検索がヒットし、データ ステータスが正當(dāng)であれば、

2. 1 次キャッシュにヒットがない場合、セッションは現(xiàn)在の NonExists レコード (クエリ ブラックリストに相當(dāng)します。無効なクエリが繰り返された場合は、判定が行われます) を検索します。パフォーマンスを向上させるためにすばやく作成できます)。NonExists に同じクエリ條件が存在する場合、null が返されます。

3. 1 次キャッシュのクエリが失敗した場合は、2 次キャッシュをクエリします。 -レベル キャッシュ ヒット、直接返す;

4. If before どのクエリもヒットしなかった場合、SQL ステートメントが発行されます。対応するレコードがクエリ內(nèi)に見つからない場合、クエリは追加されます。記録するセッションのNonExists、nullが返される;

5. マッピング設(shè)定とSQL文のResultSetに従って取得し、対応するエンティティオブジェクトを作成する;

6. 組み込みオブジェクトをセッションの管理 (レベル 1 キャッシュ) に追加します;

7. 対応するインターセプターがある場合は、インターセプター メソッドの onLoad を?qū)g行します;

8. 有効になっていて設(shè)定されている場合2 次キャッシュを使用するには、データ オブジェクトが 2 次キャッシュに含まれます;

9. データ オブジェクトを返します。

# 受信データを文字列として扱い、自動的に受信データに引用符を追加します;

$ は、入力されたデータを直接SQLで表示および生成されます。

注: $ プレースホルダーを使用すると、SQL インジェクション攻撃につながる可能性があります。# が使用できる場所には $ を使用しないでください。order by 句を記述するときは、# の代わりに $ を使用する必要があります。

MyBatis における名前空間の役割を説明します。

大規(guī)模なプロジェクトでは、多數(shù)の SQL ステートメントが存在する可能性がありますが、現(xiàn)時點では、各 SQL ステートメントに一意の識別 (ID) を與えるのは簡単ではありません。

この問題を解決するために、MyBatis では、マッピング ファイルごとに一意のネームスペースを作成し、このマッピング ファイルで定義された各 SQL ステートメントがこのネームスペースで定義されるようにすることができます。

この ID が各ネームスペースで一意であることが保証できれば、たとえ異なるマッピング ファイル內(nèi)のステートメント ID が同じであっても、競合は発生しなくなります。

MyBatis の動的 SQL とはどういう意味ですか?

一部の複雑なクエリでは、複數(shù)のクエリ條件を指定することがありますが、これらの條件は存在する場合と存在しない場合があります。永続層フレームワークを使用しない場合は、SQL ステートメントを自分で組み立てる必要がある場合があります。しかし、MyBatis はこの問題を解決するために動的 SQL 機能を提供します。 MyBatis で動的 SQL を?qū)g裝するために使用される要素は主に次のとおりです:

- if    - choose / when / otherwise    - trim    - where    - set     - foreach

使用例:

<select id="foo" parameterType="Blog" resultType="Blog">        
select * from t_blog where 1 = 1
<if test="title != null">            
   and title = #{title}
</if>
<if test="content != null">            
   and content = #{content}
</if>
<if test="owner != null">            
   and owner = #{owner}
</if>
</select>

JDBC プログラミングの欠點と MyBatis がそれらをどのように解決するかこういった質(zhì)問は?

1. JDBC: データベース リンクの頻繁な作成と解放は、システム リソースの無駄を引き起こし、システム パフォーマンスに影響を與えますが、この問題はデータベース接続プールを使用することで解決できます。

MyBatis: SqlMapConfig.xml でデータ リンク プールを構(gòu)成し、接続プールを使用してデータベース リンクを管理します。

2. JDBC: SQL ステートメントはコード內(nèi)に記述されるため、コードの保守が困難になります。SQL の実際のアプリケーションは大幅に変更される可能性があり、SQL の変更には Java コードの変更が必要です。

MyBatis: XXXXmapper.xml ファイルで SQL ステートメントを構(gòu)成し、Java コードから分離します。

3. JDBC: SQL ステートメントの where 條件は必ずしも確実ではなく、多かれ少なかれ一定である可能性があり、プレースホルダーはパラメーターに対応する必要があるため、SQL ステートメントにパラメーターを渡すのは面倒です。 1対1。

MyBatis: Mybatis は Java オブジェクトを SQL ステートメントに自動的にマップします。

4, JDBC: 結(jié)果セットを解析するのは面倒です。SQL の変更により解析コードも変更されるため、解析する前にコードを走査する必要があります。データベース レコードを pojo に解析すると便利です。オブジェクト。

MyBatis: Mybatis は SQL 実行結(jié)果を Java オブジェクトに自動的にマップします。

MyBatis と Hibernate の違いは何ですか?

1. Mybatis は Hibernate とは異なります。MyBatis はプログラマ自身が SQL ステートメントを記述する必要があるため、完全な ORM フレームワークではありません。ただし、mybatis は、XML またはアノテーションを通じて SQL ステートメントを?qū)g行するように柔軟に設(shè)定できます。そして、Java オブジェクトと SQL ステートメントをマップして最終的に実行される SQL を生成し、最後に SQL の実行結(jié)果をマップして Java オブジェクトを生成します。

2. Mybatis は學(xué)習(xí)閾値が低く習(xí)得が容易であり、プログラマーが獨自の SQL を直接記述することができるため、SQL の実行パフォーマンスを厳密に制御することができ、柔軟性が高く、必要なソフトウェア開発に非常に適しています。インターネットなどのリレーショナル データ モデルに対する高い要件 ソフトウェア、エンタープライズ オペレーション ソフトウェアなど この種のソフトウェアのニーズは頻繁に変化するため、ニーズが変化したら結(jié)果を迅速に出力する必要があります。

ただし、柔軟性の前提として、mybatis はデータベースに依存できないということです。複數(shù)のデータベースをサポートするソフトウェアを?qū)g裝する必要がある場合は、複數(shù)の SQL マッピング ファイルのセットをカスタマイズする必要があり、これは大きな作業(yè)負(fù)荷になります。

3. Hibernate には、強力なオブジェクト/リレーショナル マッピング機能と優(yōu)れたデータベース獨立性があります。リレーショナル モデルに対する要件が高いソフトウェア (要件が固定されたカスタマイズされたソフトウェアなど) の場合、Hibernate を使用して開発すると、コストを節(jié)約できます。多くのコードを作成し、効率を向上させます。

ただし、Hibernate の欠點は、學(xué)習(xí)の閾値が高く、習(xí)得の閾値がさらに高いことです。さらに、O/R マッピングの設(shè)計方法、パフォーマンスとオブジェクト モデルのトレードオフの方法、およびHibernate をうまく使用するには、豊富な経験と能力が必要です。

要するに、限られたリソース環(huán)境でユーザーのニーズに合わせて保守性と拡張性の良いソフトウェアアーキテクチャを作ることができれば、それは良いアーキテクチャなのであり、最良のフレームワークはそれだけです。適切な。

(ここでは、自分の理解と組み合わせても構(gòu)いません。遠(yuǎn)慮しないでください)

MyBatis の一次キャッシュと二次キャッシュについて簡単に説明してください。

Mybatis は、まずキャッシュ內(nèi)の結(jié)果セットをクエリします。結(jié)果セットがない場合は、データベースにクエリします。存在する場合は、キャッシュから結(jié)果セットを取得し、データベースにアクセスせずに返します。データベース。 Mybatis の內(nèi)部ストレージ キャッシュは HashMap を使用し、キーは hashCode sqlId SQL ステートメントです。 value はクエリからのマッピングによって生成された Java オブジェクトです。

Mybatis の 2 次キャッシュはクエリ キャッシュです。そのスコープはマッパーの名前空間です。つまり、同じ名前空間で SQL をクエリすると、次のクエリからデータを取得できます。キャッシュ。 2 次キャッシュは SqlSession にまたがることができます。

以上がJava 永続層の面接での質(zhì)問の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達(dá)成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F(xiàn)代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

ネットワークポートとファイアウォールの理解 ネットワークポートとファイアウォールの理解 Aug 01, 2025 am 06:40 AM

ネットワークポートアンドファイアワルクトグテルトエナブルコマニケーションwhiledensuringsecurity.1.networksarevirtualendpointsnumbered0–655 35、withwell-knownportslike80(http)、443(https)、22(ssh)、および25(smtp)識別pecificservices.2.portsoperateovertcp(信頼できる、c

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達(dá)不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達(dá)不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達(dá)可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進(jìn)みます 説明された延期聲明の例で進(jìn)みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を?qū)g行するために使用されます。パラメーターは、延期時にすぐに評価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務(wù)は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復(fù)に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

See all articles