[Spring Boot] 1. チャレンジスプリングガイド


プロジェクトの準備をする


開発ツールの準備


インテリジェント化を利用してこのコースを使用します.
https://www.jetbrains.com/ko-kr/idea/download/#section=windows
有料バージョンを書きたいのですが、コミュニティバージョンをダウンロードしましょう.

Spring Initializarを使用したプロジェクトの作成


有料バージョンは、スマートデバイス上のスプリングガイドを簡素化します.
Communityバージョンでは、https://start.spring.io/でプロジェクトを作成できます.

スプリングアイテムの実行を試みる


MariaデータベースとSpring data Jpa


MariaDBはMySQLとほぼ同じ機能ですが、完全なオープンソースコードです.
これにより、ライセンスコストを心配することなく、AWSに接続しながらシステムを最小限のコストで実行できます.

MariaDBのインストールとデータベースの作成


インストールページのMariaDBサーバエントリを選択してインストールします.
インストール中にroot 계정의 패스워드UTF8에 대한 세팅(default server's character serとしてUTF 8を使用)を確認します.
インストール完了後HeidSQL=SQL編集機能を持つ管理ツール
実行時にrootアカウントに接続する情報を入力します

Spring Data JPAを使用したプロジェクトの作成


Spring Data JPAを依存項目に入れる
build.勾配の設定
dependencies {
   ...
   compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client'
  ...
}
application.属性の設定
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/bootex
spring.datasource.username=***********
spring.datasource.password=***********
username,passwordとmariadbで設定されたusernameとpasswordのバインド

Spring Data Jpaの概要


Java Persistence APIのORM、Java Persistence API
JPAは単純なspecであるため、specを実装する各実装体には異なる会社名またはフレームワーク名があり、そのうちHibernateが最も有名である.

エンティティークラスとJpa Repository


Memoシンボルクラス
package org.zerock.ex2.entity;

import lombok.*;

import javax.persistence.*;

@Entity //해당 클래스가 엔티티를 위한 크래스이며, 해당 클래스의 인스턴스들이 jpa로 관리되는 엔티티 객체라는 것을 의미
@Table(name = "tbl_memo") // 어떠한 테이블로 생성할 것인지에 대한 정보를 담기위한 어노테이션 tbl_memo 이름 테이블로 생성
@ToString
@Getter //Getter 메서드 생성
@Builder // 객체 생성 처리
@AllArgsConstructor // @Builder를 사용하기 위한 어노테이션
@NoArgsConstructor // @Builder를 사용하기 위한 어노테이션
public class Memo {

    @Id //@Entity가 붙은 클래스는 pk필드를 @id로 지정해줘야한다.
    @GeneratedValue (strategy = GenerationType.IDENTITY) //자동생성되기 위한 어노테이션
    private Long mno;

    @Column(length = 200, nullable = false) //추가적인 필드가 필요할 경우 Column으로 속성 지정 가능
    private String memoText;
}
@Entity JPAは@Entityを追加する必要があります.このクラスはエンティティのクラスで、そのクラスのインスタンスがJPAによって管理されているエンティティオブジェクトであることを示します.@Tableデータベースでどのテーブルでエンティティークラスを作成するかについての説明.
たとえば、@Table(name="t memo")を指定すると、生成されるテーブル名はt_memoテーブルとなります.@ Id 와 GeneratedValue@Entityを持つクラスは、PK固有のフィールドを@Idと指定する必要があります.@GeneratedValue宣言を使用して、自動生成された番号を使用します.
GeneratedValue(startegy=GenerationType.xx)鍵生成ポリシータイプ
AUTO(default)=JPAインプリメンテーション作成方法を決定IDENTITY-MYSQLに対して使用するデータベース決定生成鍵
SEQUENCE-データベースのsqeuenceに基づいて鍵を生成
TABLE-鍵を生成するためのテーブルを作成する@Colunm他のフィールド(列)が必要な場合はnullable、nmame、lengthなどを使用します.
@Builder @AllArgsConstrutor @NoArgsConstructor
オブジェクトの作成を許可
JPA設定アプリ.properties
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
ddl-auto:DDL設定が自動的に作成されると、テーブルが作成されるたびに、更新されない場合はalterが作成されます.
format sql=Hibernate操作によるSQL文出力
show-sql:JPA処理時に発生したSQLを表示するかどうかを決定する
Jpa Repositoryの使用
package org.zerock.ex2.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.ex2.entity.Memo;

import java.util.List;

//JpaRepository를 사용할때는 엔티티의 타입 정보(Memo 클래스 타입)와 @ID의 타입을 지정 함
// jpa는 인터페이스 선언만으로 빈 등록됨
public interface MemoRepository extends JpaRepository<Memo, Long> {

}
CRUD :
Insertアクションinsert Action:save(エンティティオブジェクト)save(エンティティオブジェクト)
selectアクション:findByID(鍵タイプ)、getOne(鍵タイプ)
更新アクション:save(エンティティオブジェクト)save(エンティティオブジェクト)
deleteアクション:deleteById(キータイプ)、delete(ボディオブジェクト)

ページング/ソートの処理


ページ処理に必要なのはPageRequest作成者です(newは保護された宣言として使用できません)
オブジェクトを作成する静的修飾子of()を使用して処理します.
page.size.Sort情報を使用したオブジェクトの作成

クエリメソッド機能と@Query

  • クエリー方法:機能
  • 、メソッド名自体をクエリー構文と見なす
  • @Query:SQLと同様に、エンティティークラスの情報を使用してクエリーを作成します.
    動的クエリ処理機能、例えば
  • Querydsl
    Spring data jpaリファレンス
    主にSQLで使用するキーワードと同じです
    たとえば、Memoオブジェクトのmno値が70~80の間であり、mnoの逆順序でソートしたい場合は、次の方法を追加できます.
    package org.zerock.ex2.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.zerock.ex2.entity.Memo;
    
    import java.util.List;
    
    //JpaRepository를 사용할때는 엔티티의 타입 정보(Memo 클래스 타입)와 @ID의 타입을 지정 함
    // jpa는 인터페이스 선언만으로 빈 등록됨
    public interface MemoRepository extends JpaRepository<Memo, Long> {
        List<Memo> findByMnoBetweenOrderByMnoDesc(long from, long to);
    
    }
    
    Spring Data Jpaが提供するクエリー・メソッドは便利な場合がありますが、複雑な条件を結合または処理する必要がある場合は、通常は不便です.
    @Queryはデフォルトでのみ使用可能です
    @Queryはメソッド名を考慮せずにメソッドに追加することで処理される.
  • は、所望のデータ
  • を選択的に抽出することができる.
  • 純SQLを使用する機能
  • たとえば、mnoの逆順序でソートする
    @Query("select m from Memo m order by m.mno desc")
    List<Memo> getListDesc();

    Spring MVCとThymeleaf