2022년 3월 29일(화) ~ 30일(수)
[스파르타코딩클럽] 웹개발의 봄, Spring 2주차 과정 - 1
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
Application 실행 후, http://localhost:8080/h2-console 접속, connect 클릭
// 데이터 생성하기
// 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;
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> {
}
// 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{
}