この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常に詳細で、皆さんの勉強や仕事に一定の参考値があります。困っている友人は参考にしてください。 Mybatis で SQL を構成する方法は 2 つあります。1 つは XML を使用する方法、もう 1 つはアノテーションを使用する方法です。 Mybatis はアノテーションを使用して SQL を構成しますが、構成機能が限られており、複雑な SQL の読みやすさが悪いため、ほとんど使用されません。 Mybatis は XML 構成方式を頻繁に使用します。いくつかの簡単な XML 要素を使用して、動的 SQL の機能を完成させることができます。Mybatis のマッピング XML では、多数の判断を構成できるため、実装に大量のコードを必要とする多くの機能を実現できます。これにより、コードの量が大幅に削減され、Mybatis の柔軟性、高い構成可能性、保守性が反映されます。
if要素 if 要素は最もよく使用される判定文であり、Java の if 文に相当します。多くの場合、test 属性と組み合わせて使用されます。 <select id="findRole1" パラメータタイプ="文字列" 結果マップ="roleResultMap"> 1=1 の場合、t_role から role_no、role_name、note を選択 <if test="roleName != null かつ roleName !=''"> role_name は concat('%', #{roleName}, '%') のように記述します。 </if> </選択> パラメータ roleName がマッパーに渡されるとき、パラメータが空でない場合は roleName のファジー クエリが構築され、それ以外の場合はこの条件は構築されません。 Mybaties の if 要素は、SQL を結合する作業を大幅に節約し、それを XML で維持します。 選択、場合、それ以外の要素 判断する際に 2 つのオプションだけではなく、さらにオプションがある場合は、switch...case...default... 関数に似たステートメントになります。マップされた SQL ステートメントでは、choose、when、otherwise 要素を使用してこの機能を実行します。 <select id="findRole2" パラメータタイプ="role" resultMap="roleResultMap"> t_role から role_no、role_name、note を選択 ここで1=1 <選択> <test="roleNo != null かつ roleNo !=''">の場合 かつ role_no = #{roleNo} </いつ> <when test="roleName != null and roleName !=''"> AND role_name は concat('%', #{roleName}, '%') のように連結されます </いつ> <それ以外の場合> かつメモがnullではない </そうでない場合> </選択> </選択> 上記のシナリオは次のとおりです。 まず、ロール番号が空でない場合、ロール番号のみがクエリ条件として使用されます。 ロール番号が空でロール名が空でない場合は、ロール名があいまい検索の条件として使用されます。 ロール番号とロール番号の両方が空の場合、ロールメモは空であってはなりません。 トリム、場所、要素の設定 前の SQL ステートメントに「1=1」を追加することでその機能を実現できますが、where を使用する方がよい実装があります。 where 要素内の条件が満たされると、組み立てられた SQL に where SQL キーワードが追加されますが、そうでない場合は追加されません。 <select id="findRole3" パラメータタイプ="role" resultMap="roleResultMap"> t_role から role_no、role_name、note を選択 <どこ> <if test="roleName != null かつ roleName !=''"> role_name は concat('%', #{roleName}, '%') のように記述します。 </if> <if test="note != null かつ note !=''"> そして、concat('%', #{note}, '%')のようにメモします。 </if> </どこ> </選択> 場合によっては、一般的な and や or などの特殊な SQL 構文を削除する必要があることがあります。トリム要素を使用すると、目的の効果も得られます。 Prefix はステートメントのプレフィックスを表し、prefixOverrides は削除する必要がある文字列を表します。これは前の where ステートメントと同等です。 <select id="findRole4" パラメータタイプ="文字列" 結果マップ="roleResultMap"> t_role から role_no、role_name、note を選択 <trim prefix="where" prefixOverrides="and"> <if test="roleName != null かつ roleName !=''"> role_name は concat('%', #{roleName}, '%') のように記述します。 </if> </トリム> </選択> Hibernate では、特定のフィールドを更新するためにすべてのフィールドを永続オブジェクトに送信する必要がある場合、SQL ステートメントの実行効率に影響します。最善のアプローチは、主キーと更新フィールド値を SQL に渡して更新することです。 set 要素はこの機能を実現できます。セット要素がカンマに遭遇すると、対応するカンマが自動的に削除されます。 <更新 id="updateRole" パラメータタイプ="role"> t_role を更新 <設定> <if test="roleName != null かつ roleName !=''"> ロール名 = #{ロール名}, </if> <if test="note != null かつ note != ''"> メモ = #{メモ} </if> </set> role_no = #{roleNo} の場合 </更新> 要素ごとに foreach 要素は、コレクションをトラバースするために使用されるループ ステートメントです。List および Set インターフェイスの配列とコレクションを適切にサポートし、それらのトラバース関数を提供します。SQL の in キーワードでよく使用されます。 <select id="findRoleByNums" resultMap="roleResultMap"> t_roleからrole_no、role_name、noteを選択します。role_noは <foreach item="roleNo" index="index" collection="roleNoList" 開く="(" セパレーター="," 閉じる=")"> #{ロール番号} </foreach> </選択> コレクション構成の roleNoList は渡されるパラメータの名前であり、配列、リスト、セット、その他のコレクションにすることができます。 item はループ内の現在の要素を構成します。 インデックスはコレクション内の現在の要素の位置を構成します。 開くと閉じるは、これらのコレクション要素をパッケージ化するために使用されるシンボルを構成します。 セパレータは要素間の区切りです。 テスト属性を使用して文字列を決定する test は条件判断文に使用され、真偽を判断することと同等です。ほとんどのシナリオでは、主に何かが空かどうかを判断するために使用されます。 <select id="getRoleTest" パラメータタイプ="文字列" 結果マップ="roleResultMap"> t_role から role_no、role_name、note を選択 <if test="type == 'Y'.toString()"> ここで1=1 </if> </選択> MybatisではSQLにtype='Y'を渡すと1=1となる条件を追加できるので、文字列判定の場合はtoString()メソッドを追加して比較することができます。 バインド要素 bind 要素は、より使いやすい OGNL 式を通じてコンテキスト変数を定義するために使用されます。 たとえば、あいまいクエリでは、MySQL データベースの場合、パラメータを % で接続する concat がよく使用されます。しかし、Oracle データベースにはそのようなものはありません。Oracle データベースで使用される接続記号は「||」であるため、SQL ではそれを実装するために 2 つの形式が必要になります。bind 要素を使用すると、データベース言語を使用する必要はありません。 <select id="findRole5" パラメータタイプ="文字列" 結果マップ="roleResultMap"> <bind name="pattern" value="'%' + _parameter + '%'" /> t_role から role_no、role_name、note を選択 role_name は #{pattern} のようになります </選択> 上記は、学習プロセス中に Mybatis の動的 SQL ステートメントに関する一般的な知識のポイントをまとめたものです。皆さんが一緒に学習し、向上できることを願っています。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: JavaScript の基礎: エラーキャプチャメカニズム
1. 2つのクエリエンジン(myIsamエンジン)のクエリ速度InnoDB はテーブル内の特定の行数...
データベースは、どのオブジェクトにどのフィールドが含まれているかを照会します。 *を選択 sysob...
30 種類の高品質な英語リボン フォントを無料でダウンロードできます。デザイナーは常に、25 種類の...
シンプルな機能: ブラウザの右上隅にあるプラグイン アイコンをクリックすると小さなポップアップ ウィ...
問題の背景:再生中のビデオのスクリーンショットを撮る必要があります。ビデオはビデオタグを使用して再生...
質問Nginx は $remote_addr を実際の IP アドレスとして受け取りますが、実際には...
1. 仮想マシン(物理マシン)をインストールする仮想マシンまたは物理マシンにインストールできます。 ...
目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...
目次アプリケーションシナリオ簡単に言えば、カスタム指示基本概念グローバルカスタマイズローカルカスタマ...
1. Docker Composeを使用して起動を構成するDocker Compose を知らない場...
序文退社前に、ある依頼を受けました。基本イメージ規格の変更により、最新の Docker イメージ規格...
reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...
プロジェクトの展開中に遭遇した落とし穴Zhihudemo を展開する際、Jenkins などの自動展...
この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...
目次1. データベース設計の3つのパラダイムに関する知識の説明1. デザインパラダイムとは何ですか?...