[Book Study] Spring Framework 스프링 프레임워크 첫걸음
4. 데이터베이스 작업
4 - 1 데이터베이스 생성
데이터베이스
- 데이터를 보관하기 위한 '상자'
데이터
- 규칙을 가지고 데이터를 정리
관계형 데이터베이스 (RDB)
- 데이터를 표 형식으로 표현하고, 여러 표에서 항목의 값 사이에 관계를 맺고 있는 데이터베이스
PostgresQL 실행
4 - 2 테이블 생성
테이블
- 데이터베이스 안에서 실제로 규칙을 가진 데이터가 저장되는 상자
레코드와 칼럼
- 레코드(가로/행), 칼럼(세로/열)
제약 조건
- 제약조건에 따라 테이블 내의 데이터를 자유롭게 제약하여 불일치 값이 저장되는 것을 막을 수 있다.
1. NOT NULL : NULL 입력을 허용하지 않음(필수 입력).
2. UNIQUE : 중복값 입력을 허용하지 않음(고유한 값).
3. CHECK : 지정한 조건을 만족하지 않는 값의 입력을 허용하지 않음
4. PRIMARY KEY : 테이블 안에서 레코드를 식별하는 기본키를 설정. 기본키는 NOT NULL과 UNIQUE가 함께 적용
5. FOREIGN KEY : 관련된 테이블을 연결하는 설정 (외부 키)
6. DEFAULT : 칼럼의 초깃값 설정
4 - 3 데이터 입력
SQL
- 데이터베이스를 조작하기 위한 언어
CRUD
- 영속적으로 데이터를 취급하는 4개의 기본적인 기능인 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)
4 - 4 엔티티와 리포지토리 알아보기
엔티티
- 데이터를 담아두는 객체, 데이터베이스 테이블의 한 행에 대응하는 객체
- 엔티티의 필드는 테이블의 칼럼값에 대응
리포지토리
- 데이터베이스를 조작하는 클래스
- 리포지토리를 생성하는 경우는 반드시 인터페이스를 정의하고 구현 (리포지토리 인터페이스의 필드에 리포지토리 구현 클래스를 DI하여 특정 구현에 의존하는 것을 피할 수 있기 때문)
- 자바에서는 인터페이스를 구현한 클래스의 접미사에 'Impl'을 붙이는 경우가 많음 (Implements의 약자)
4 - 5 스프링 데이터 JDBC 사용해보기
O/R 매퍼
- 애플리케이션에서 사용하는 O(객체)와 R(관계형 데이터베이스)의 데이터를 매핑하는 것
- 미리 설정된 객체와 관계형 데이터베이스 간의 대응 관계 정보를 가지고 인터페이스의 데이터에 대응하는 테이블에 내보내거나 데이터베이스에서 값을 읽어 들여 인터페이스에 대입하는 작업을 자동으로 실행
스프링 데이터 JDBC
- 스프링 데이터가 제공하는 CrudRepository를 사옥해서 자동으로 CRUD를 지원하는 메서드를 사용할 수 있음
스프링 데이터 JDBC 프로그램 생성
application.properties 설정
- postgres 데이터베이스 접속 관련 설정
spring.datasource.driver-class-name=org.postgresql.Driver
//JDBC 드라이버의 클래스명을 지정
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
//데이터베이스의 접속 URL 설정
spring.datasource.username=postgres
//데이터베이스의 접속하는 유저명 설정
spring.datasource.password=0000
//데이터베이스의 접속하는 패스워드 설정
엔티티 생성
package com.example.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
/**
* Member 테이블 엔티티
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Member {
/** Member 번호 */
@Id
private Integer id;
/** Member 이름 */
private String name;
}
@Data
- 클래스에 부여하는 것으로, 전 필드에 대해 getter/setter 로 액세스 할 수 있음
- hashCode(), equals(), toString()도 자동 생성
@NoArgsConstructor
- 클래스에 부여하는 것으로, 기본 생성자가 자동 생성
@AllArgsConstructor
- 클래스에 부여하는 것으로, 전 필드에 대해 초기화 값을 인수로 가지는 생성자가 자동 생성
@Id
- 기본키에 해당하는 필드에 어노테이션 부여
- org.springframework.data.annotation.Id가 임포트 됨
리포지토리 생성
package com.example.demo.repository;
import com.example.demo.entity.Member;
import org.springframework.data.repository.CrudRepository;
/**
* Member 테이블 : 리포지토리
*/
public interface MemberCrudRepository extends CrudRepository<Member, Integer> {
}
Member : CrudRepository 인수의 타입 (저장 대상 객체의 타입)
Integer : @Id 어노테이션을 부여한 필드의 타입 (저장 대상 객체의 기본기 타입)
-> MemberCrudRepository 인터페이스 안에서 메서드를 작성하지 않아도 사용 가능
* MeberCrudRepository는 인터페이스이므로 인스턴스화 불가 -> @Repository 어노테이션을 따로 부여 불가
CrudRepository의 CRUD 메서드
반환형 | 메서드 | 개요 |
long | count() | 취득한 엔티티의 수를 돌려줍니다. |
void | delete(Member Entity) | 지정한 엔티티를 삭제합니다. |
void | deleteAll() | 리포지토리에서 관리하는 모든 엔티티를 삭제합니다. |
void | deleteAll(Iterable entities) | 지정한 복수의 엔티티를 삭제합니다. |
void | deleteById(Integer id) | 지정한 ID에 해당하는 엔티티를 삭제합니다. |
boolean | existsById(Integer id) | 지정한 ID에 해당하는 엔티티의 존재 여부를 확인합니다. |
Iterable | findAll() | 모든 엔티티를 반환합니다. |
Iterable | findAllById(Iterable ids) | 지정한 복수의 ID에 해당하는 엔티티를 반환합니다. |
Optional | findById(Integer id) | 지정한 ID에 해당하는 엔티티를 반환합니다. |
Member | save(Member Entity) | 지정한 엔티티를 저장합니다. |
Iterable | saveAll(Iterable entities) | 지정한 모든 엔티티를 저장합니다. |
실제 작업을 처리하는 클래스
package com.example.SpringDataJDBCSample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.example.demo.entity.Member;
import com.example.demo.repository.MemberCrudRepository;
/**
* 스프링 부트 기동 클래스
*/
@SpringBootApplication
public class SpringDataJdbcSampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringDataJdbcSampleApplication.class, args)
.getBean(SpringDataJdbcSampleApplication.class).execute();
}
@Autowired
MemberCrudRepository repository;
/**
* 등록과 전체 취득 처리
*/
private void execute() {
//등록
executeInsert();
//전체 취득
executeSelect();
}
/**
* 등록
*/
private void executeInsert() {
//엔티티 생성(Id는 자동 부여되기 때문에 null을 설정)
Member member = new Member(null, "이순신");
//리포지토리를 이용해 등록을 수행하고 결과를 취득
member = repository.save(member);
// 결과를 표시
System.out.println("등록 데이터 : " + member);
}
/**
* 전체 취득
*/
private void executeSelect() {
System.out.println("--- 전체 데이터를 취득합니다 ---");
//리포지토리를 이용해 전체 데이터를 취득
Iterable<Member> members = repository.findAll();
for(Member member : members) {
System.out.println(member);
}
}
}
'Web Develop > Book Study' 카테고리의 다른 글
[Book Study] 스프링 프레임워크 첫걸음 - 6. 템플릿 엔진 알아보기 (0) | 2023.08.12 |
---|---|
[Book Study] 스프링 프레임워크 첫걸음 - 5. MVC 모델 알아보기 (0) | 2023.08.11 |
[Book Study] 스프링 프레임워크 첫걸음 - 3. 스프링 프레임워크의 핵심 기능 알아보기 (0) | 2023.08.09 |
[Book Study] 스프링 프레임워크 첫걸음 - 2. 기초 지식 배우기 (0) | 2023.08.08 |
[Book Study] 스프링 프레임워크 첫걸음 - 1. 스프링 프레임워크 알아보기 (0) | 2023.08.08 |
댓글