Mybatis ファジークエリ実装方法

Mybatis ファジークエリ実装方法

Mybatis ファジークエリ実装方法

mybatis のリバース アシスタントは非常に使いやすく、通常の SQL ステートメントを書く時間を大幅に節約できますが、ファジー クエリ ステートメントを自動的に生成することはできません。ただし、ファジー クエリは開発に不可欠なため、マッパー用のファジー クエリ関数を手動で記述する必要があります。

ここでまず、MyBatis/Ibatis における # と $ の違いを明確にします。

1. # すべての受信データを文字列として扱い、自動的に受信されるデータに二重引用符を追加します。たとえば、order by #user_id# の場合、渡された値が 111 であれば、SQL に解析された値は order by "111" となり、渡された値が id であれば、解析された SQL は order by "id" となります。

2. $ は受信したデータを直接 SQL に表示します。たとえば、order by $user_id$ の場合、渡された値が 111 であれば、SQL に解析された値は order by user_id になり、渡された値が id であれば、解析された SQL は order by id になります。

3. #この方法により、SQL インジェクションを大幅に防止できます。

4. $ メソッドでは SQL インジェクションを防ぐことはできません。

5. $ メソッドは通常、テーブル名などのデータベース オブジェクトを渡すために使用されます。

6. 一般的に、# が使える場合は $ は使わないでください。

ps: mybatis を使用する場合、<![CDATA[]]> の使用にも遭遇します。このシンボル内のステートメントは文字列として処理されるのではなく、ストアド プロシージャの実行などの SQL ステートメントとして直接処理されます。

私たちの要件は、ユーザーに対してファジークエリを実行することです。考え方としては、すべての基本フィールド (ユーザー名、性別など) を渡されたキー (キーワード) と比較することです。

1. UserMapper.xmlをエンコードする

 <select id="queryUserByKey" パラメータタイプ="文字列"
    結果タイプ="com.lqr.pojo.User">
    CONCAT('%',#{key},'%') のように、uid が一致する user から * を選択します。
    またはユーザー名は CONCAT('%',#{key},'%') のように表記されます
    または CONCAT('%',#{key},'%') のような実名
    またはCONCAT('%',#{key},'%')のような識別
    またはCONCAT('%',#{key},'%')のようなメール
  </選択>

2. UserMapper.java のコーディング

リスト<User> queryUserByKey(文字列キー);

上記は開発中に遭遇したシナリオです。今後も、mybatis ファジークエリの他の使用例を記録していきます。

ご質問がありましたら、メッセージを残すか、コミュニティに参加して話し合いましょう。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。

以下もご興味があるかもしれません:
  • Mybatis におけるユニバーサル マップとファジー クエリの記述の詳細な説明
  • MyBatisでファジークエリを実装するいくつかの方法
  • Mybatis マッパーファイルの書き方の詳細説明
  • MyBatis ファジークエリマッパー.xml の書き方の説明

<<:  React tsx はランダムな検証コードを生成します

>>:  Ubuntu で中国語入力方法が使えない場合の解決策

推薦する

mysql8.0.11をインストールしてrootパスワードを変更し、navicat for mysqlに接続するアイデアの詳細な説明

1.1. ダウンロード:公式ウェブサイトから zip パッケージをダウンロードします。私は 64 ビ...

MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法

以前、会社で小さな機能に取り組んでいたとき、特定の状況でデータがいくつあるかを数えてから問題を修正し...

レイアウトサイズを変更するために左右にドラッグする純粋なCSS

ブラウザの非overflow:auto要素resize伸縮機能を利用して、JavaScript を使...

入力ボックスのオートコンプリート機能をオフにする

これで、autocomplete と呼ばれる input の属性を使用できるようになりました。オート...

CSS3は、変換変形とイベントを組み合わせて扇形のナビゲーションを完成させます。

この場合、transition という単語を間違って書いたため、午後中ずっとそれに取り組みました。本...

KVM 仮想マシンのオンライン ホット マイグレーションを実装する方法 (画像とテキスト)

1. KVM仮想マシンの移行方法と注意すべき点KVM 仮想マシンを移行する方法は 2 つあります。...

tomcat ログ ディレクトリ内のログ ファイルの分析 (概要)

tomcat が起動されるたびに、次のログ ファイルがログ ディレクトリに自動的に生成され、日付順...

60件のページング事例と優れた実践例を推奨

<br />構造と階層により複雑さが軽減され、読みやすさが向上します。記事やサイトが整理...

ウェブページでコンテンツを引用するためによく使われるHTMLタグをマスターする

長い引用には blockquote を、短い引用には q を、参考文献には cite を使用します。...

Windows 10 での mysql-8.0.17-winx64 のインストール方法

1.公式サイトからダウンロードして解凍する参考: ダウンロード後、zip 圧縮ファイル (mysql...

vue3.0共通コンポーネントの自動インポート方法の例

1. 前提条件インポートには require.context メソッドを使用します。vite で作成...

MySQLデッドロック問題の詳細な分析

序文私たちのビジネスがまだ初期段階にあり、同時実行の度合いが比較的低い場合、数年間はデッドロックの問...

中国の専門ではない:文化の違いの中でのウェブ開発

Web デザインと開発は大変な作業なので、少数の人だけを対象に設計しないでください。これは外国人が...

MySQLの指定されたテーブルからデータをエクスポートする例の詳細な説明

指定されたテーブルからデータをエクスポートするMySQLの詳細な説明必要とする: 1. テーブルはす...