MySQLのクエリのデータベーステーブルのフィールドリストの情報を動的にソート

MySQLのクエリのデータベーステーブルのフィールドリストの情報を動的にソート


 

背景説明

データ項目一覧表示ページは、フロントエンドで使用される表の構成要素は、各列がになると、このページデータ行われる昇順または降順ソート。

しかし、顧客の期待はランダムに列をクリックしたときに、クエリのすべてのデータをソートします。

 

例えば:

 

100ページ10 10のページ、データを照会することがあります。このページデータのテーブルのフロントエンドアセンブリ5月10日、ソート、ソートされた他の9に参加しません。

しかし、実際の期待はソーティングに関与する10のデータを照会することです。

特定の列ではなく、各列は、クエリの結果は再びソートする、昇順または降順であってもよいです。


 

治療

フロントエンド技術、バックエンド処理の必要性、クエリインターフェイスの制限のためにリストを変更します。

1、クエリのエンティティクラスを変更します

最初の要求エンティティを照会する必要があり、2つの追加フィールドorderField OrderType、フィールド名と、着信ソートモードを保存する(ASC昇順、DESC降順)について

orderField:ソートするフィールドを受信するための手段

orderType:ソートするためのモードを受け、ASC、DESC、ASC、DESC

コードは以下の通りであります:

    // 对字段进行排序
    プライベート文字列orderField。    // 存放排序字段
    プライベート文字列orderType。     // ASC DESC 

    パブリックストリングgetOrderField(){
         戻りorderFieldと、
    } 

    公共 ボイドsetOrderField(文字列orderField){
         この .orderField = orderField。
    } 

    パブリック文字列getOrderType(){
         戻りorderTypeと、
    } 

    公共 ボイドsetOrderType(文字列orderType){
         この .orderType = orderType。
    }

 

2、ファイルを変更mapper.xml

MyBatisのは、メソッドのリストでマッパーファイル、SQLクエリを見つけます。

次のコードを追加します。

< もしテスト= "orderField !=  nullを して orderField !=  ''   orderType !=  nullを して orderType !=  '' " > 
  ORDER  BY $ {orderField} $ {orderType} 
 </ 場合>

【注意】特に:ここではSQLの2つのパラメータを使用するようにしてください$ {} 受信しますが、使用することはできません#{}をそれ以外の場合は、所望の効果に到達しません。

$ {} 受信した文字列を処理しませんたとえば、次の着信およびCREATE_TIME DESC、$ {}治療効果がCREATE_TIMEのDESC BY ORDERした後、逆順CREATE_TIME電界効果で実現することができます。

#{} これは、入ってくる文字列を処理しますたとえば、次の着信およびCREATE_TIME DESC、#{}治療効果の後に「DESC」CREATE_TIME '、ORDER BYで文字列定数はCREATE_TIME電界効果に従って逆順に到達しないように。

もちろん、$ {}はSQLインジェクションにつながる可能性があります。一般的に、#は、{}に使用されています。このシナリオでは、$ {}が使用され、変換値で渡される必要はありません。

機能のタイトルを実現するためには、たったの$ {}のみ、この機能を使用します。

 

3、インターフェース呼び出しの場を増やします

増加したときに、基準伝送、  orderField と  OrderType、次のような効果を

{
     "PAGENUM":1  "pageSizeを":5  " orderField ":" CREATE_TIME"  " orderType ":" DESC" 
}

 

 

これまでのところ、関数が入ってくるフィールド名順ソート実現します。

 

おすすめ

転載: www.cnblogs.com/miracle-luna/p/11360117.html