데이터베이스(DataBase)란 데이터를 보관하기 위한 '상자'라고 할 수 있음.
데이터베이스에서 데이터를 모을 때는 특정한 규칙을 적용해서 데이털르 정리해서 보관함.
관계형 데이터베이스(Relational Database)는 데이털르 표 형식으로 표현하고, 여러 표에서 항목의 값 사이에 관계를 맺고 있는 데이터베이스를 뜻함.
표는 테이블(Table)이라고 부르고 테이블과 테이블간의 관계를 관계(Relationship)라고 함.
관계형 데이터베이스는 가장 일반적으로 사용되는 데이터베이스. 줄여서 RDB라고 부름
패스워드 입력창에 설치할 때 지정한 패스워드를 입력하고 OK버튼 클릭
Servers -> PostgreSQL16 -> DataBase 선택
PostgreSql에서는 설치 후 초기화할 때 'postgresql'라는 이름으로 데이터베이스 생성
데이터베이스가 데이터를 보관하기 위한 상자라고 설명했지만 데이터베이스 안에서 실제로 규칙을 가진 데이터가 저장되는 상자를 테이블이라고 함.
테이블은 데이터를 항목으로 해서 이차원 표 형식으로 정리해서 저장
테이블의 가로 행(row)을 레코드(record)라고함.
하나의 레코드가 한 건의 데이터이며, 테이블의 세로 열(column)을 칼럼(column)이라고함. 하나의 칼럼은 데이터의 각 요소가됨
Name | Data Type | Length/Precision | Scale | NotNUll? | PrimaryKey? | Default |
---|---|---|---|---|---|---|
id | serial | no | yes | |||
name | charater varying | 10 | yes | no |
id 칼럼은 1에서 214748364까지 일련번호가 부여됨.
레코드의 제약 조건(Constraint)으로 'Primary Key'를 부여함.
name 칼럼은 문자 데이터로 10글자까지 입력되고 필수 입력의 의미로 Not Null 제약 조건을 설정
제약 조건 | 개요 |
---|---|
Not Null | Null 입력을 허용하지 않음(필수 입력) |
Unique | 중복값 입력을 허용하지 않음(고유한 값) |
Check | 지정한 조건을 만족하지 않는 값의 입력을 허용하지 않음 |
Primary Key | 테이블 안에서 레코드를 식별하는 기본키를 설정.(기본키는 Not Null, Unique 함께 적용 |
Forign Key | 관련된 테이블을 연결하는 설정(외부 키라고도 부름) |
Default | 칼럼의 초기값 설정 |
SQL은 데이터베이스를 조작하기 위한 언어.
SQL은 Structured Query Language(구조화 질의어)이며 SQL은 ANSI(American National Standard Institute)와 ISO(국제 표준화 기구)에서 사양이 표준화되어 있어 다른 데이터베이스에서도 같은 방법을 조작 가능
영속적으로 데이터를 취급하는 4개의 기본적인 기능인 생성(Creat), 읽기(Read), 갱신(Update), 삭제(Delete)의 머리글자를 따서 만든 단어
CRUD | 명령어 | 개요 |
---|---|---|
Create | Insert | 데이터를 등록 |
Read | Select | 데이터를 참조 |
Update | Update | 데이터를 갱신 |
Delete | Delete | 데이터를 삭제 |
Tables -> member 선택 -> Tools -> Query Tool 선택하면 Query Editor이 표시됨
id 칼러dms serial 타입이여서 자동으로 일련번호가 설정되기 때문에 Insert 문에 설정할 필요가 없음
INSERT INTO member(name) VALUES ('홍길동');
INSERT INTO member(name) VALUES ('이순신');
Table -> member 선택 -> 표 마크 View Data 클릭하면 자동으로 Query Editor가 표시되며 Data Output에 등록된 데이터 확인 가능
Tables -> member -> 메뉴 바 -> Tools -> Query Tool -> Query Editor -> SQL 구문 입력
SELECT id, name FROM member;
Qurey Editor 에서 다음 SQL 구문 실행
UPDATE member SET name = 'Lee Sun-sin' WHERE id=2;
Query Editor에 다음 SQL 구문 실행
DELETE FROM member WHERE id=2;
엔티티를 한마디로 표현하면 '데이터를 담아두는 객체' 입니다.
엔티티는 데이터베이스 테이블의 한 행(레코드)에 대응하는 객체이며, 엔티티의 필드는 테이블의 칼럼값에 대응함.
//Member 테이블 : 엔티티
public class Member{
//id 칼럼 대응
private Integer id;
//name 칼럼 대응
private String name;
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;s
}
}
클래스명
클래스명은 대응하는 데이터베이스의 테이블명으로 하는 경우가 많습니다.
데이터베이스에 값 넘겨주기
데이터베이스 값을 등록/갱신하는 경우에는 엔티티에 값을 넣어서 넘겨줍니다.
데이터베이스에서 값 가져오기
데이터베이스에서 값을 가져오는 경우에는 값을 엔티티에 넣어서 가져옵니다.
데이터베이스를 조작하는 클래스
레포지토리를 생성하는 경우에는 반드시 인터페이스를 정의하고 구현해햐함.
레포지토리 인터페이스의 필드에 레포지토리 구현 클래스를 DI하여 특정 구현에 의존하는 것을 피할 수 있기 때문.
Object-relational Mapper 는 애플리케이션에서 사용하는 O(Object):'객체'와 R(Relational):'관계형 데이터베이스'의 데이터를 매핑하는 것
O/R 매퍼는 미리 설정된 객체와 관계형 데이터베이스 간의 대응 관계 정보를 가지고 인터페이스의 데이터에 대응하는 테이블에 내보내거나 데이터베이스에서 값을 읽어 들여 인터페이스에 대입하는 작업을 자동을 실행
스프링 데이터 JDBC는 O/R 매퍼이며, 스프링 데이터가 제공하는 CrudRepository를 상속해서 자동으로 CRUD를 지원하는 메서드를 사용할 수 있습니다.
src/main/resource -> application.properties 열기
아래 구문 추가
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:접속URL/postgres
spring.datasource.username=유저명
spring.datasource.password=비밀번호
항목 | 설명 |
---|---|
spring.datasource.driver.class-name | JDBC 드라이버의 클래스 명을 지정. |
spring.datasource.url | 데이터베이스의 '접속 URL설정' |
spring.datasource.username | 데이터베이스에 접속하는 '유저명'설정 |
spring.datasource.password | 데이터베이스 접속하는 '패스워드 설정' |
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Member {
//Member 번호
@Id
private Integer id;
private String name;
}
public interface MemberCrudRepository extends CrudRepository<Member, Integer> {
}
반환형 | 메서드 | 개요 |
---|---|---|
long | count() | 취득한 엔티티의 수를 돌려줌 |
void | delete(Member entity) | 지정한 엔티티 삭제 |
void | deleteAll() | 레포지토리에서 관리하는 모든 엔티티 삭제 |
void | deleteAll(Iterable entites) | 지정한 복수의 엔티티 삭제 |
void | deleteById(Integer id) | 지정한 ID에 해당하는 엔티티 삭제 |
boolean | existsById(Integer id) | 지정한 ID에 해당하는 엔티티의 존재 여부 확인 |
Iterable | findAll() | 모든 엔티티 반환 |
iterable | findAllById(Iterable ids) | 지정한 복수의 ID에 해당하는 엔티티 반환 |
Optional | findById(Integer id) | 지정한 ID에 해당하는 엔티티 반환 |
Members | save(Member entity) | 지정한 엔티티 저장 |
Iterable | saveAll(Iterable entities) | 지정한 모든 엔티티 저장 |
@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 설정0
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);
}
}
등록 데이터 : Member(id=3, name=이순신)
--- 전체 데이터를 취득합니다 :) ---
Member(id=1, name=홍길동)
Member(id=3, name=이순신)