Web階層開発
6794 ワード
MemberForm
Webレイヤのデータを受信するためにMemberFormクラスを作成し、コントローラを作成します.
これはDTOです.
メンバーオブジェクトではなく新しいFormを作成する理由
@NotEmptyのような構文は@Valid構文を扱うための構文であり,entityでこれらの構文を実行すると乱雑になる.
ドメインに必要な制約は、Web制御の制約とは異なる場合があります.
getter setterのみを持つ転送のためのオブジェクトDTO
フォームを使用せずにエンティティによって処理されます.
エンティティに処理画面のコードが追加されました.(これは単なる例です)
デザインが乱雑で、画面に従属しています.
エンティティは、他の依存ではなく、コアビジネスロジックのみに依存するようにできるだけ設計する必要があります.
このようにしてこそ、エンティティを柔軟に使用し、メンテナンス性を向上させることができます.
FormオブジェクトまたはDTOを使用して、スクリーンAPIをカスタマイズします.
apiを作成する場合、エンティティを(Web上で伝播)渡すことはできません.
エンティティを変更する場合はapi仕様を変更する必要があり、重要な情報が漏洩する可能性があります.
まず、会員の収入を処理する簡単な方法を見てみましょう.
ここから伝わってくるモデルの相手はどんな奴なんだろう.
Spring Model
モデルに入るとインタフェースであることがわかり、内部には
Map<String, Object>
がメンバーとしています.また、addAttribute()などの機能により、モデルに必要なプロパティとその値を提供し、転送するビューにデータを渡すこともできます.
Springでコントローラメソッドを作成する場合は、特にモデルタイプのパラメータを指定できます.モデルオブジェクトは,JSPにコントローラによって生成されたデータが含まれ,伝達の役割を果たす存在である.これにより,JSPなどのビューに渡す必要があるデータを送信することができる.メソッドのパラメータにモデルタイプが指定されている場合、スプリングは特にモデルタイプのオブジェクトを作成し、メソッドに注入します.
最も一般的な
addAttribute(String, Object)
メソッドでは、attributeNameとattributeValueが含まれており、コントローラを介してモデルに格納されています.次に、
@ModelAttribute
言語テストを見てみましょう.@ModelAttribute
は、強制的に伝達されたパラメータをモデルに入れて伝達するために必要なパラメータである.@ModelAttribute
のパラメータはタイプに制限されず、モデルで伝達されるため、画面でパラメータ伝達データを再使用する必要がある場合に便利です.createForm.html
正直html、css、jsに関する知識はほとんどありません.
時間帯の文法を勉強すべきだと思います.
<form role="form" action="/members/new"
th:object="${memberForm}" method="post">
上記のコードにより、およそ/members/new
で動作が発生した場合、form名義でmemberFormオブジェクトpostリクエストが送信されます.そのため、次の方法が実行されているようです.
@Validアドレスの@NotEmptyなどの条件を確認します.
@Validで問題が発生した場合、BindingResultはデータを受信します.彼に対する結果を処理する
変更、マージの検出
商品側の要望から、商品を登録して登録する商品について、
詳細プロパティには変更機能が必要です.
以前のレッスンでは、永続性コンテキストを学習すると、プライマリ・キャッシュから汚れたキャッシュが変更され、updateクエリの内容が自動的に解放され、準永続性ステータスが学習されました.
準永続性エンティティとは、永続性コンテキストによって管理されなくなったエンティティです.
この準ゼロスピードシンボルを変更するには、2つの方法を使用します.
1.変更の検出
@Transactional
void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한 다.
findItem.setPrice(itemParam.getPrice()); //데이터를 수정한다`
}
永続性コンテキストでエンティティを再問合せし、データのメソッドを変更します.「取引」でエンティティを再問合せし、変更する値を選択します.
トランザクションのコミット時に、変更を検出してデータベースでUPDATE SQLを実行します.
2. merge
@Transactional
void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item mergeItem = em.merge(item);
}
最終的に分解すると,変更検出とmergeの内部操作構造は同じである.
ただし、変更検出機能を使用すると、必要なプロパティのみを選択して変更できます.
連結を使用すると、すべてのプロパティが変更されます.マージ時に値がなければnullに更新する危険もあります.(すべてのフィールドがマージによって置き換えられます.)
참고: 실무에서는 보통 업데이트 기능이 매우 제한적이다. 그런데 병합은 모든 필드를 변경해버리고, 데이터 가 없으면 null 로 업데이트 해버린다. 병합을 사용하면서 이 문제를 해결하려면, 변경 폼 화면에서 모든 데 이터를 항상 유지해야 한다. 실무에서는 보통 변경가능한 데이터만 노출하기 때문에, 병합을 사용하는 것이 오히려 번거롭다.
==>を使用して検出を変更します.コントローラに不自然なエンティティを作成しないでください.
IDと変更するデータをトランザクションのあるサービス・レイヤに明確に送信します.(パラメータまたはdto)
永続的なエンティティを事務所のサービス・レベルで表示し、エンティティのデータを直接変更します.
トランザクションのコミットポイントで変更検出を実行します.
ポスト
htmlを勉強して、timelife...
Webページの動作については、まだ理解が薄い.
Reference
この問題について(Web階層開発), 我々は、より多くの情報をここで見つけました https://velog.io/@jaca/웹-계층-개발テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol