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 で中国語入力方法が使えない場合の解決策

推薦する

nginx で複数のフロントエンド プロジェクトをデプロイするいくつかの方法

nginx を使用して 1 つのサーバーに複数のフロントエンド プロジェクトをデプロイする 3 つの...

MySQLのデッドロックチェック処理の通常の方法

通常、デッドロックが発生すると、重みが最も小さい接続が強制終了され、ロールバックされます。ただし、最...

Node.js の非同期ジェネレータと非同期反復の詳細な説明

序文ジェネレーター関数は、async/await が導入される前から JavaScript に存在し...

ローカル写真をアップロードする前にプレビューコード例を実装するための HTML5 と jQuery

HTML5 と jQuery はアップロード前にローカル画像のプレビューを実装しており、その効果は...

Zabbix WEB 監視実装プロセス図

Zabbix独自のWEBインターフェースを例に、Web監視の設定を行います。環境: zabbix4....

Nginx 構成 80 ポート アクセス 8080 とプロジェクト名アドレス メソッド分析

Tomcatはプロジェクトにアクセスします。通常はIP + ポート + プロジェクト名です。 Ngi...

ミニプログラム録画機能の実装

序文ミニプログラムを開発する過程では、録音機能を実装し、録音を再生し、録音をサーバーにアップロードす...

丸い角や鋭い角の代わりに文字を使用することに関する研究経験の共有

1. フォントと文字表示の関係左側と右側の鋭角部分は Songti フォントで表示されます: &l...

crontab 実行時間とシステム時間の不一致の解決方法

序文LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

HTML の META タグの使用に関するヒントの例

HTML メタタグHTML メタタグは、Web ページのコンテンツに関する情報をブラウザや検索エンジ...

ウェブデザインと制作の一般的な原則をまとめる

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

フレックスレイアウトの改行スペースでの align-content の使用

1. この記事で実装した効果図は以下のとおりです。レイアウトの右側に Flex レイアウトを使用し、...

一般的な Nginx のテクニックと例の概要

1. 複数サーバーの優先順位たとえば、各サーバー ブロックがポート 80 をリッスンする場合、www...

MySQLクエリが遅い場合の理由と解決策

Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...

Linux gzip コマンドのファイル圧縮実装原理とコード例

gzip は、Linux システムでファイルの圧縮と解凍によく使用されるコマンドです。このコマンドで...