- IntelliJ 프로젝트 생성하기
File > New > Project...
Java / Gradle / JDK : 17 선택 후 Next
- Spring Web
- Spring Data JPA
- H2 Database
- Lombok
추가 후 Create
프로젝트가 생성되면 springframework 버전을 2.7.5로 바꿈
꼭 생성하자마자 바꾸자.... 나중에 바꾸려면 힘들다... 알고싶지 않았다....
버전을 바꾸지 않으면 아무리 실행해도 테이블 생성이 안된다~~!!
버전을 나중에 바꾸려고 하면 빨간 지렁이들이 춤을 춘다.... 다시 import해줘야한다 흑흑
- db 연결
src > main > resorces > application.properties
- JPA 샘플
Test (Class)
@Entity
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private Gender gender;
@OneToMany(mappedBy = "test", fetch = FetchType.EAGER)
private List<Orders> orders = new ArrayList<>();
public Test(String username, Gender gender) {
this.username = username;
this.gender = gender;
}
}
- @Entity : DB 테이블 역할
- @Id : PK
- @GeneratedValue(strategy = GenerationType.IDENTITY) : ID가 자동으로 증가하여 생성
- @Column(nullable = false, unique = true) : 컬럼
nullable: null 허용 여부
unique: 중복 허용 여부 (false 일때 중복 허용) - @Enumerated(value = EnumType.STRING) : Enum 사용 (사용자가 타입을 정의할 수 있음)
- @OneToMany : 연관관계 표현 (FK)
- public Test(String username, Gender gender) : 생성자 객체 생성할 때 사용
Gender (Enum)
Enum으로 값을 입력받을 때 해당 Type으로 받을 수 있음 ex) Gender.FEMALE
public enum Gender {
MALE,
FEMALE
}
TestRepository (interface)
public interface TestRepository extends JpaRepository<Test, Long> {
Optional<Test> findByUsername(String userName);
}
- JpaRepository<Test, Long> : @Entity로 생성한 테이블에 접속하기 위한 인터페이스
Test : 생성한 DB 테이블
Long : @Id의 타입 - Optional<Test> findByUsername(String userName) : username으로 조회하기
JpaRepository에서 전체 조회 기능을 제공하지만 조건을 걸고 싶으면 메서드를 등록해줘야함
TestRun (실행할 class)
@Component
@RequiredArgsConstructor
public class TestRun implements ApplicationRunner {
private final TestRepository testRepository;
@Override
public void run(ApplicationArguments args) throws Exception {
List<Test> test = new ArrayList<>();
Test test1 = new Test("이진", Gender.FEMALE);
test.add(test1);
testRepository.saveAll(test);
System.out.println("test 데이터");
List<Test> findTests = testRepository.findAll();
for (Test findTest : findTests) {
System.out.println(findTest.getUsername());
System.out.println(findTest.getGender());
}
Test tester = testRepository.findByUsername("이진").orElseThrow(
() -> new RuntimeException("이진 없음")
);
System.out.println("이름 = " + tester.getUsername());
System.out.println("성 = " + tester.getGender());
}
}
@Component : Bean을 자동으로 등록
@RequiredArgsConstructor : 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성
private final TestRepository testRepository : repository 객체 생성
testRepository.saveAll(test) : List에 정보를 담아 저장
testRepository.findAll() : 해당 테이블을 모두 찾아 List에 담음
.getUsername() : 컬럼을 가져옴 (TestRepository 에서 extends한 JpaRepository의 기본 메서드)
.findByUsername : 해당 컬럼으로 조회 (TestRepository에서 직접 등록한 메서드)
- 실행하기
실행시 테이블은 자동으로 만들어짐
- DB 확인하기
localhost:8080/h2-console
접속 후 application.properties에 작성한 datasource.url, User Name, Password 설정 후 Connect
생성된 테이블은 왼쪽에서 확인 가능하고 오른쪽에서 직접 Select해볼 수 있음
'개발일기 > Java' 카테고리의 다른 글
IntelliJ 프로젝트 자동 실행 (1) | 2023.02.28 |
---|---|
Postman 사용 (0) | 2023.02.27 |
InteliJ 자동 import방법 (0) | 2023.02.24 |
[Java] 배열 (0) | 2023.02.16 |
[Java] 연산자 (0) | 2023.02.16 |