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

推薦する

Hyper-V インストール CentOS 8 の問題の分析

CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...

NodeJSのモジュール性に関する詳細な説明

目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...

HTML Web ページにおける URL の表現

HTML では、一般的な URL はさまざまな方法で表現されます。相対 URL:コードをコピーコード...

MySQL 8.0.11 圧縮版のインストールチュートリアル

この記事では、MySQL 8.0.11のインストールチュートリアルを参考までに紹介します。具体的な内...

ウェブページ内の 2 つのボックス モデル (W3C ボックス モデル、IE ボックス モデル)

Web ページ ボックス モデルには 2 種類あります。 1: 標準 W3C ボックス モデル。2:...

Nginx 転送ソケットポート設定の詳細な説明

Nginx によるソケット ポート転送の一般的なシナリオ: オンライン学習アプリケーションでは、通常...

MySQL マスタースレーブレプリケーションの遅延の原因と解決策

目次レプリケーション ロジックの簡単な概要:遅延の原因と解決策〇メインデータベースへの頻繁なDMLリ...

Linuxでのソフトウェア(ライブラリ)の更新コマンドの詳しい説明

Ubuntu サーバーにパッケージをインストールする場合、sudo apt-get install ...

Dockerスペースがいっぱいでコンテナに入れない場合の解決策

トラブル発生が突然で、業務も迫っていたため、現場のスクリーンショットを撮る時間がありませんでしたので...

Linux でパスワードの有効期限を表示および設定する方法

適切な設定を行うことで、Linux ユーザーにパスワードを定期的に変更させることができます。パスワー...

HTMLとリソースがどのように読み込まれるかを理解します

このブログのすべてのコンテンツは、クリエイティブ コモンズ ライセンスの下でライセンスされています。...

MySQLで日付と時刻を照会する方法

序文:プロジェクト開発では、一部のビジネス テーブル フィールドで日付と時刻の型が使用されることが多...

Dockerコンテナのログ処理の詳細な説明

Docker には多くのログ プラグインがあります。デフォルトでは json-file を使用します...

MySQL インストール図の概要

MySQL 5.5 のインストールと設定方法のグラフィックチュートリアルMySQL 5.5 のインス...