神へのジャワの道:ジャワのインタビューの準備(14)

記事のディレクトリ

4、SpringMvcフレームワーク

1.SpringMVCプロセス

1.ユーザーがフロントコントローラーのDispatcherServletにリクエストを送信します

2. DispatcherServletは、HandlerMappingプロセッサマッパーを呼び出す要求を受け取ります

3.プロセッサマッパーは特定のマッパーを見つけ、プロセッサオブジェクトとプロセッサインターセプターを生成してDispatcherServletに返します。

4. DispatcherServletは、HandlerAdapterプロセッサアダプタを呼び出します

5. HandlerAdapterは、適応後に特定のプロセッサー(コントローラー)を呼び出します

6.コントローラーの実行後、ModelAndViewに戻ります。

7. HandlerAdapterは、コントローラーの実行結果ModelAndViewをDispatcherServletに返します。

8.DispatcherServletはModelAndViewをViewResloverに渡します

9、ViewResloveは解析後に特定のビューに戻ります

10. DispatcherServletは、ビューに従ってビューのレンダリングを実行します

11.DispatcherServletはユーザーに応答します

2.SpringMVCとは

SpringMVCは、MVCのオープンソースフレームワークであり、Springのサブモジュールです。

3.SpringMVCで転送とリダイレクトを設定する方法

(1)転送:「forward:user?name = zhangshan」のように、戻り値の前に「forward:」を追加します。

(2)リダイレクト:「redirect:http://www.baidu.com」のように、戻り値の前に「redirect:」を追加します。

4.SpringMVCの一般的な注釈は何ですか

@RequestMapping:リクエストURLマッピングを処理するために使用されるアノテーション。クラスまたはメソッドで使用できます。クラスで使用されると、リクエストに応答するクラス内のすべてのメソッドがこのアドレスを親パスとして使用することを意味します

@RequestBody:アノテーションはhttpリクエストのjsonデータを受信し、jsonをJavaオブジェクトに変換することを実現します

@ResponsBody:アノテーションは、コントローラーメソッドによって返されたオブジェクトを顧客へのjsonオブジェクト応答に変換します

5、MyBatisフレームワーク

1.MyBatisとは

MyBatisは、カスタマイズされたSQL、ストアドプロシージャ、高度なマッピングをサポートする、優れた永続性レイヤーフレームワークであるセミORMフレームワークです。Mybatisは、ほとんどすべてのJDBCコードとパラメーターの手動設定、および結果セットの取得を回避します。Mybatisは、単純なXMLアノテーションと構成を通じて、ネイティブタイプ、インターフェイス、およびJavaPojoをマッピングできます。

2.Mybatisの長所と短所

利点

  • 従来のSQLステートメントプログラミングに基づいており、非常に柔軟性があり、アプリケーションやデータベースの既存の設計に影響を与えることはありません。SQLはXMLで記述されているため、SQLとプログラムコード間の結合が解放され、統合管理が容易になります。XMLタグが提供されます。 、動的SQLステートメントの記述のサポート
  • 従来のJDBCと比較して、コードの量を50%以上削減し、JDBCの多くの冗長コードを排除します。
  • さまざまなデータベースとの良好な互換性
  • マッピングタグを提供する

不利益

  • SQLステートメントの作成の作業負荷は比較的大きく、特に多くのフィールドと関連するテーブルがある場合、開発者がSQLステートメントを作成する能力には特定の要件があります。
  • SQLステートメントはデータベースに依存しているため、データベースの移植性が低く、データベースを自由に変更することはできません。

3.MyBatisのプログラミング手順

1.SqlSessionFactoryを作成します

2.SqlSessionFactoryを介してSqlSessionを作成します

3.sqlSessionを介してデータベース操作を実行します

4. sqlSession.commit()を呼び出して、トランザクションをコミットします

5. sqlSession.close()を閉じます

4.MyBatisの下部で使用されているデザインパターン

1.ビルダーモード

SqlSessionFactoryBuilder
XMLConfigBuilder
XMLMapperBuilder

2.工場モデル

SqlSessionFactory
ObjectFactory
MapperProxyFactory

3.シングルトンモード

ErrorContext
LogFactory

4.エージェンシーモデル

MapperProxy 
ConnectionLogger

5。#{}と$ {}の違いは何ですか

1。#{}はコンパイル前の処理、$ {}は文字列の置換です

2. MyBatisが#{}を処理するとき、SQLの#{}を?(プレースホルダー)に置き換え、PreparedStatementのsetメソッドを呼び出して値を割り当てます。

3. MyBatisが{}を処理するとき、それはときそれはある{}変数の値を置き換えます。(連結文字列)

4。#{}を使用すると、SQLインジェクションを効果的に防ぐことができます

6.エンティティクラスの属性名とテーブルのフィールド名の違いに対処する方法

1. query sqlステートメントでフィールドのエイリアスを定義することにより、フィールドエイリアスはエンティティクラスの属性名と一致します。

<select id="getOrderById" parameterType="int" resultType="Order">
   slelect order_id id,order_no orderNo,order_price price 
    from orders
    where order_id=#{id}
</select>

2.resultMapを使用してフィールド名と属性名をマップすると一貫性がありません

<select id="getOrder" parameterType="int" resultMap="orderMap">
   select * from orders where order_id=#{id}
</select>
<resultMap id="orderMap" type="Order">
   <!-- id属性来映射主键字段-->
    <id property="id" cloumn="order_id"></id>
    
    <result property="orderNo" cloumn="order_no"></result>
    <result property="price" cloumn="order_price"></result>
</resultMap>

7.ステートメント記述のようなファジークエリ

1.JavaコードにSQLワイルドカードを追加します

string wildcardname =%smi%;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
select * from foo where bar like #{
    
    value}
</select>

2. SQLステートメントで文字列をスプライシングすると、SQLインジェクションが発生します

tring wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
select * from foo where bar like "%"#{
    
    value}"%"
</select>

8.通常、xmlマッピングファイルにはそれに対応するDaoインターフェイスがあります。このDaoインターフェイスの動作原理は何ですか?Daoインターフェースのメソッドのパラメーターが異なる場合、メソッドをオーバーロードできますか?

DaoインターフェースはMapperインターフェースです。インターフェイスの完全修飾名は、マッピングファイル内の名前空間の値です。インターフェイスのメソッド名は、マッピングファイル内のマッパーステートメントのID値です。インターフェイスメソッドのパラメータは、に渡されるパラメータです。 sql。Mapperインターフェイスには実装クラスがありません。インターフェイスメソッドが呼び出されると、キー値としてのインターフェイスのフルネーム+メソッド名のスプライシング文字列でMapperStatementを一意に見つけることができます。Mybatisでは、各<select>、<insert>、<update>、<delete>タグがMapperStatementオブジェクトに対応します。

完全修飾名+メソッド名のストレージおよび検索戦略が使用されるため、マッパーインターフェイスのメソッドはオーバーロードできません。Mapperインターフェースの動作原理はJDK動的プロキシです。MybatisはJDK動的プロキシを使用して、Mybatisの実行時にMapperインターフェースのプロキシオブジェクトプロキシを生成します。プロキシオブジェクトはインターフェースメソッドをインターセプトし、代わりにMapperStatementで表されるSQLを実行します。 、次にSQL実行結果を返します。

9. MyBatisはどのようにページングを実行しますか?ページングプラグインの原理

10.MyBatisプラグインの動作原理とプラグインの書き方を簡単に説明します

11. MyBatisはバッチ挿入を実行しますが、データベースの主キーリストを返すことはできますか?

12. MyBatisダイナミックSQLは何をしますか?ダイナミックSQLとは何ですか?動的SQLの実行原理を簡単に説明する

13. MyBatisはSQL実行結果をターゲットオブジェクトとしてカプセル化し、それを返すにはどうすればよいですか?

14.MyBatis動的プロキシメカニズムがフレームワークのその部分に適用されます

おすすめ

転載: blog.csdn.net/weixin_54707168/article/details/113977180