記事のディレクトリ
- 4、SpringMvcフレームワーク
- 5、MyBatisフレームワーク
-
-
- 1.MyBatisとは
- 2.Mybatisの長所と短所
- 3.MyBatisのプログラミング手順
- 4.MyBatisの下部で使用されているデザインパターン
- 5。#{}と$ {}の違いは何ですか
- 6.エンティティクラスの属性名とテーブルのフィールド名の違いに対処する方法
- 7.ステートメント記述のようなファジークエリ
- 8.通常、xmlマッピングファイルにはそれに対応するDaoインターフェイスがあります。このDaoインターフェイスの動作原理は何ですか?Daoインターフェースのメソッドのパラメーターが異なる場合、メソッドをオーバーロードできますか?
- 9. MyBatisはどのようにページングを実行しますか?ページングプラグインの原理
- 10.MyBatisプラグインの動作原理とプラグインの書き方を簡単に説明します
- 11. MyBatisはバッチ挿入を実行しますが、データベースの主キーリストを返すことはできますか?
- 12. MyBatisダイナミックSQLは何をしますか?ダイナミックSQLとは何ですか?動的SQLの実行原理を簡単に説明する
- 13. MyBatisはSQL実行結果をターゲットオブジェクトとしてカプセル化し、それを返すにはどうすればよいですか?
- 14.MyBatis動的プロキシメカニズムがフレームワークのその部分に適用されます
-
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実行結果を返します。