2017-9-20 1-Nメンテナンス

4716 ワード

***
採用したフレームワークはSpring 4+SpringMVC+Hibernate/MyBatis、補助gradle構築ツールとdubboミドルウェアとローカルmaven倉庫、プロジェクトにはredis、webServiceなどの技術があり、ここでは使わずに先に言わない.プロシージャは、表示レイヤ、ビジネスロジックレイヤ、およびデータベースレイヤに関連します.今回はhibernateとMyBatisを使ったので、持続層も増やしました.
国際化のサポートに参加することを考慮することができます.
一.追加削除について
1.
ひょうげんそう
  • データの完全性と合法性の検証:データベース設計の要求に基づいて、空でないフィールドを表示層で値を制御する.
  • //    
    $.fn.formValidate = function () {
        var ret = true;
        this.each(function (i, formElem) {
            ret = $(":input", $(formElem)).validate();
            return ret;
        });
        return ret;
    };
  • フォーム値のフォーマットが正しいかどうかを確認します.例えば、日付、ドロップダウン・ボックス、ラジオ・ボックス、マルチ選択ボックスなどです.同時に、データ辞書から読み取る必要がある値をドロップダウンして、tagが正しく参照、表示、伝達されているかどうかを確認します.
  • は、特定のビジネスロジックを有するフィールドに対してjsを用いて制御する.例えば、開始日が終了日より大きくないなど.
  • formフォームでは、新規と更新の区別の必要性を考慮して、フォームにオブジェクトのプライマリ・キー値を挿入し、JSTLの値を例にとると、以下のようになります:
  • "XXX" value="${XXXX}"/>
  • 1-Nのinsertの違い:1-Nの新規では、1のテーブルの非空フィールドは空であることが許されず、Nのテーブルは記録されず、記録され得る.Nのテーブルの新規化については、動的に追加する方法を採用し、+番号をクリックするたびにjsrenderを用いてinput値のセットを動的に追加し、このセットの新規なinputは削除することができるが、ビジネスロジック層には伝わらない.レンダーする行数indexをvar size = $("#table tbody tr").length;で記録し始めたばかりで、テストで問題が見つかりました.inputのセットを削除して追加すると、trのindex値が重複します.そこで,1つのJSのグローバル変数が+番号をクリックした回数,すなわち生成したinputボックスのグループ数を記録するように設定した.

  • ビジネスロジック層はhibernateを用いてデータを格納し、まずプライマリテーブルを格納してプライマリテーブルPKに戻り、サブテーブルを遍歴し、id値をサブテーブルオブジェクトに詰め込んで格納する.ここでは、フロントフィールドの大文字と小文字の変換が正しいかどうかに注意します(class:text-uppercase).
    2.表示層&ビジネスロジック層
  • クエリー・パラメータの正当性と完全性:まず、ビジネス・ロジックに基づいて、クエリー・パラメータが空でないかどうか、各クエリー・パラメータの転送が正しいかどうかを制御します.次に、クエリー操作が完了した後、クエリーボックスのクエリーパラメータが埋め戻されるかどうか.この点で何度もミスを犯したのは、コントロール層がModelAndViewオブジェクトに戻るときに、伝わってきたqueryDTOオブジェクトを詰め込むのを忘れたためで、覚えておいてください!!
  • プライマリ・セカンダリ・テーブルのクエリーでは、まずSQL文の実装です.次に、フロントエンドのページングプラグインと実装効果です.

  • まずSQL文について話します.hibernate関連クエリーの永続化文にはあまり詳しくないので、普段は簡単なinsert、delete、update、ページングクエリーの操作しかしていないので、今回のメインサブテーブルのクエリーは、比較的熟練したMyBatisを使ってクエリーを行います(私が必要とするSQLを直接書くのはもちろん便利です~).
    関連クエリーの条件をサブテーブルのクエリー条件に入れ、サブテーブル条件が存在する場合に関連クエリーを行います.そうしないと、メインテーブルに記録があり、サブテーブルに記録がない場合が漏れます.結果をdistinctし、重複データをフィルタリングする.注意クエリーフィールドには、下線のあるフィールドに別名を付けます.ここではMyBatisを検討します.サブテーブルのクエリーでは、関連クエリー条件をwhere文の下に直接置くことも、distinctでフィルタする必要もありません.
    次にフロントエンドのページングプラグインで、まず1つのプラグインだけを使って、サブテーブルのクエリーボタンをクリックする時、htmlで解析したjspページに戻って、プラグインの方法を書き直して、ページングを実現することができて、しかし2つのページングは互いに影響します.js制御を採用しようとしたが,表示レイヤがjsコードを削除してもjsメソッドがロードされることに気づいた.やめる.
    bootstrap-tableメソッドが追加されましたが、このプラグインのapiや使用方法についてはネット上では詳しく説明しません.jspページデータがコントローラに転送されると、フレームワークにjsonに変換する方法が設定されていないので、下@ResponseBodyとResultDTOを使って、オブジェクトにカプセル化し、フロントが自分で解析します.
    responseHandler: res,
     //       
            function res(res) {
                if (res) {
                    return {
                        "rows" : res.result,
                        "total" : res.detail
                    };
                } else {
                    return {
                        "rows" : [],
                        "total" : 0
                    };
                }
            }

    また、ここではPOST方式でデータを転送し、contentType: "application/x-www-form-urlencoded",ではなく設定します.そうでないと、バックグラウンドでは、ページングのstartIndetなどのページングパラメータが受信できません(クエリーパラメータは正常に渡されます).
    3.
  • クエリーオブジェクトの表示、動的編集と業務論理層の記憶は、プライマリテーブルidに基づいてプライマリテーブルデータを取得し、サブテーブルデータを詰め込んでオブジェクトにカプセル化し、フロントで表示する.プライマリ・テーブルは変更をサポートし、サブテーブルは変更削除もサポートします.ここでは、既存のデータと新たに追加されたデータの保存に注意し、メインテーブルはデータを取り出し、空でないことを検証してから直接updateする.サブテーブルは、削除された操作行であるかどうか、既存であるかどうかを判断します.

  • 4.プライマリ・テーブル・データの直接削除とサブテーブル・データの削除を含む.