Springコメント


JPA


列のデフォルト設定

@Column(columnDefinition = "varchar(255) default 'John Snow'")
private String name;
 
@Column(columnDefinition = "integer default 25")
private Integer age;
 
@Column(columnDefinition = "boolean default false")
private Boolean locked;

@Embedded, @Embeddable


複数のColumnを1つのオブジェクトとして使用するには
@Embeddable
public class Address {
  private String country;
  private String apartment;
  private String road;
}

@Entity
public class User {
  ...
  
  @Embedded(생략가능)
  private Address address;
}

持続性コンテキスト


(Namjun Kimブログを参照)
これは、
  • エンティティを永続的に格納する環境を意味する.
  • ですが、実際にはDBに格納されるのではなく、永続性コンテキストによってエンティティが永続化されます.
  • 永続コンテキストは、エンティティマネージャを介してアクセスする論理概念です.
  • 正確には、
  • はpersist()ポイントの永続的なゲストに格納される.DB保存はその後です.
  • トランザクションがコミットされると、永続性コンテキストの情報がデータベース・クエリに送信されます.
  • 持続性コンテキストの利点
  • メインキャッシュ
  • 永続コンテキスト(エンティティーマネージャ)にプライマリキャッシュが存在します.
  • プライマリキャッシュがある場合、find()はプライマリキャッシュでエンティティを最初にチェックし、存在する場合はDBは聞こえず、直接戻ります.
  • しかし、最初のキャッシュはスレッドが終了すると消えます!グローバルなのは二次キャッシュです.
  • の一貫性を保証できます.1回目のキャッシュのため、2回のオブジェクトをクエリーしても、同じオブジェクトを転送できます.
  • トランザクションがコミットされると、遅延書き込みされたSQLリポジトリにクエリーが作成され、それらがスタックされて処理されます.
  • クエリ結果

  • ~.getResultList()
    結果をコレクションに戻します.結果がない場合は、空のコレクションを返します.
  • ~.getSingleResult()
    結果が1件である場合に使用します.結果が出ない場合、NotResultExceptionが発生します.
  • Spring


    DTA, DAO, Domain


    (ring 0310.logを参照)

    Domain(=Entity)

  • クラス
  • 実際のデータベースのテーブルと一致
    なぜDTOと
  • Entityを分けるのですか?
  • EntityはDB Layer、DTOはView Layerです.
  • したがって、Entityは変更時に複数のクラスに影響を与えるため、設計時に慎重に作成する必要があります.
  • とは対照的に、DTOは、要求および応答の表現ロジック(画面上の設計構成のために設計されたロジックとは異なり、ビジネスロジックとは異なる)である.あります.よく変更します.そのため、両者を分ける必要がある.
  • 言い換えれば、DTOは、Entityに論理を表す構造を追加するか、DTOに必要なフィールドメンバーのみを追加する構造である.

    DTO(Data Transfer Object)

  • Viewと通信するクラス.
  • DBと受信したデータをどのように交換するかを定義する役割.
  • ex) DTO
  • @Getter
    public class UserDto {
        public String userid;
        public String password;
    
        public SignInReq(String userid, String password) {
            this.userid = userid;
            this.password = password;
        }
    }

    DAO(Data Access Object)

  • オブジェクト
  • 実際にデータベースにアクセスしてCRUDデータ
    データベースと
  • サービスを接続する役割
  • インタフェースおよびインプリメンテーションを作成し、インプリメンテーションにおいてCRUD機能を実装し、DIを行う.
  • ex)インタフェース
  • public interface MemberRepository {
        Member save(Member member);
        Optional<Member> findById(Long id);
        Optional<Member> findByName(String name);
        List<Member> findAll();
    }
  • ex)実施体
  • public class JpaMemberRepository implements MemberRepository{
        ...
        
        @Override
        public Member save(Member member) {
            ...
        }
    
        @Override
        public Optional<Member> findById(Long id) {
            ...
        }
    
        @Override
        public Optional<Member> findByName(String name) {
            ...
        }
    
        @Override
        public List<Member> findAll() {
            ...
        }
        ...
    }

    Intellij, Java

  • テストクラスの作成を削減
    Ctrl + Shift + T
  • 自動生成
  • ジェネレータ
    Alt+insert
  • Stream
    Streamは、コレクション内の各要素をループ処理できるコードモードです.(代替文用)