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

推薦する

Bツリーの削除プロセスの紹介

前回の記事 https://www.jb51.net/article/154157.htm では、B...

elementui での el-cascader カスケードセレクタの実践

目次1. 効果2. メインコード1. 効果機能: インターフェイスから取得したデータを使用してオプシ...

Docker での環境変数の使用とよくある問題の解決策

序文Docker はコンテナの環境変数を設定できます。設定方法は 2 つあります。イメージを作成する...

MySQL の集計関数 count の使用法とパフォーマンスの最適化テクニック

この記事の環境はWindows 10、MySQLのバージョンは5.7.12-logです1. 基本的な...

Dockerボリューム削除操作

プルーンこのコマンドを使用するには、クライアントとデーモンの両方の API バージョンが少なくとも ...

TypeScript 開発のための 6 つの実用的なヒント

目次1. 開発前にエンティティの種類を決定する2. インターフェースをリクエストするときは、使用する...

Vueは2つのルーティング許可制御メソッドを実装しています

目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

HTML ドラッグ アンド ドロップ機能の実装コード

Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...

Linux 継続的インテグレーションで Maven を自動的にインストールする方法

Mavenパッケージを解凍する tar xf apache-maven-3.5.4-bin.tar....

MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法

アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...

Alibaba Cloud イメージリポジトリの Docker 構成変更の実装

docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...

10分でDockerを使ったマイクロサービスのデプロイ方法を学ぶ

Docker は 2013 年のリリース以来、広く注目され、ソフトウェア業界を変える可能性を秘めてい...

5つのCSSスクロール天井実装方法の比較(パフォーマンス向上版)

改訂版のプレビューこの記事は 3 日前に書かれたものです。先輩の同僚から改訂の提案をいくつかいただき...

Vue再帰コンポーネントの簡単な使用例

序文多くの学生は既に再帰に精通していると思います。アルゴリズムの問​​題を解決するために再帰がよく使...