春のWeb開発、Spring 2週目-1


2022年3月29日(火曜日~30日)
[スパルタエンコーディングクラブ]Web開発の春、Spring第2週コース-1

◎ RDBMS


  • RDBMSとはリレーショナル・データベース管理システム/コンピュータに情報を格納管理する技術、性能、管理において、
  • で大きな改善が行われた.
  • RDBMSタイプ:MySQL、PostgreSQL、Oracleデータベース...
  • ◎ H2

  • H 2:In-memory DB/メモリDBとは、サーバの実行時にのみコンテンツが格納され、サーバが停止すると、すべてのデータが削除される(練習用)
  • のことである.
  • H 2 Webコンソールの表示
    src > main > resources > application.propertiesに追加された
  • spring.h2.console.enabled=true
    spring.datasource.url=jdbc:h2:mem:testdb
    アプリケーションを実行したら、http://localhost:8080/h2-consoleに接続し、「connect」をクリックします.

    ◇SQL練習

  • Excelファイルが「データベース」の場合、
    1枚のアクセルが「テーブル」と呼ばれ、
    1つのExcel行を「データ」と呼びます.
  • // 데이터 생성하기
    
    // IF NOT EXISTS 존재 안하면
    // NOT NULL 어느 하나라도 비면 안된다
    // bigint(5) Long 을 가르킴 (정수)
    // varchar(255) String을 가르킴
    // PRIMARY KEY (id) 행/데이터 하나하나를 구분해주는 유일한 값으로 삼음
    // AUTO_INCREMENT 자동으로 증가하게 값 부여 
    
    CREATE TABLE IF NOT EXISTS courses (
        id bigint(5) NOT NULL AUTO_INCREMENT, 
        title varchar(255) NOT NULL,
        tutor varchar(255) NOT NULL,
        PRIMARY KEY (id)
    );
    
    // SQL 데이터 삽입
    
    // INSERT INTO 데이터 넣어줘
    INSERT INTO courses (title, tutor) VALUES
        ('웹개발의 봄, Spring', '남병관'), ('웹개발 종합반', '이범규');
    
    // SQL 데이터 조회하기
    SELECT * FROM courses;
  • SQLではなくSpring Data JPAを使用しています.
  • を参照してください.

    ◎ JPA



  • JPAとはSQLを使用せずにデータを作成、表示、変更、削除できる翻訳機.

  • JPA Domain == SQL Table
    JPA Repository = SQL SQL

  • @贴るもの:Annotation:~~キャラクターがいるって教えて
  • //Application.java
    
    @EnableJpaAuditing // 생성, 수정 일자에따라 날짜가 자동으로 업데이트
    @SpringBootApplication
    public class Week02Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Week02Application.class, args);
        }
    
        @Bean // @Bean은 다음 단계에서 알아가도록 하자
        // 해당 아래코드가 중요!
        public CommandLineRunner demo(CourseRepository repository) {
            return (args) -> {
            	// 생성자를 통해 Course 생성
                Course course1 = new Course("웹개발의 봄 Spring","남병관");
                // 생성한 course1을 repository를 이용해 database에 저장
                repository.save(course1);
                
    			// repository를 이용해 Database에 있는 정보 불러오기
                List<Course> courseList =  repository.findAll();
                for (int i=0; i<courseList.size(); i++){
                	// 여기에서 c를 sout하면 package 형식으로 print되므로 Course의 getter를 통해서 인쇄
                    Course c = courseList.get(i);
                    System.out.println(c.getTitle());
                    System.out.println(c.getTutor());
                }
            };
        }
    }
    
    // Course.java
    
    @NoArgsConstructor // 기본생성자를 대신 생성해줍니다.
    @Entity // 테이블임을 나타냅니다.
    public class Course extends Timestamped{
    
        @Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
        @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
        private Long id;
    
        @Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
        private String title;
    
        @Column(nullable = false)
        private String tutor;
    
    
        //Getter
        public String getTitle() {
            return this.title;
        }
    
        public String getTutor() {
            return this.tutor;
        }
    
        //생성자
       public Course(String title, String tutor) {
            this.title = title;
            this.tutor = tutor;
        }
    }
    
    
    
    // CourseRepository.java    interface 형식
    
    //JPA는 Repository(Interface)를 통해서만 사용할 수 있습니다.
    //Interface는 클래스에서 멤버가 빠진, 메소드 모음집이라고 보시면 됩니다.
    import org.springframework.data.jpa.repository.JpaRepository;
    
    // extend : 다른 기능을 가져와서 이용한다. JpaRepository<데이터베이스 이름, id의 자료형>
    public interface CourseRepository extends JpaRepository<Course, Long> {
    }
  • Course setterを設定しない理由->レポートは
  • を自動的に設定します.

    ◇クラスの継承/作成日、変更日

    // Timestamped.java
    
    @MappedSuperclass // 상속했을 때, 컬럼으로 인식하게 합니다.
    @EntityListeners(AuditingEntityListener.class) // 생성/수정 시간을 자동으로 반영하도록 설정
    // abstract : 직접 구현이 안됨, 상속으로만 사용 가능
    public abstract class Timestamped { 
    
        @CreatedDate // 생성일자임을 나타냅니다.
        private LocalDateTime createdAt;
    
        @LastModifiedDate // 마지막 수정일자임을 나타냅니다.
        private LocalDateTime modifiedAt;
    }
    
    // Course.java의 일부
    // extends를 통해  Timestamped의 내용을 가지고옴
    public class Course extends Timestamped{
    }