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" }
これまでのところ、関数が入ってくるフィールド名順ソート実現します。