728x90
728x90
TRM (Table Relational Mapping)
- DB의 테이블과 애플리케이션의 객체 간의 매핑
- MyBatis에서는 DB 쿼리를 xml 파일로 작성하고, Java 코드에서 이를 호출하는 방식으로 DB와 상호작용
# 모델 클래스
- DB에서 받아온 데이터를 담는 클래스 (DTO와 구분하기!)
- 값을 담아둘 수 있고, 필요하다면 기능(메서드)를 추가해둘 수 있음
# DTO (모델 클래스와 비교)
- 데이터 전송 객체
- Form 태그에서 보내야 하는 정보들만 멤버 변수로 갖는 DTO를 각각 선언함
ex) SignInFormDto의 멤버 변수 : id, password
ex) SignUpFormDto의 멤버 변수 : id, password, name, age
- DTO 간에 멤버 변수가 겹치는 경우
· 상속은 권장하지 않음 (코드 변경이 이뤄지면서 꼬일 수 있음)
· 포함 관계로 사용하는 경우는 많음 (초보 단계에서는 우선 사용하지 말고 진행)
초기 스키마 및 샘플 데이터 설정
1. application.yml 파일에 경로 및 파일명 입력
2. 입력한 경로/파일명에 맞게 sql 파일을 생성하고 쿼리 입력
- table.sql (테이블 생성 쿼리)
더보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | CREATE TABLE user_tb ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(30) NOT NULL, fullname VARCHAR(50) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE TABLE account_tb ( id INT AUTO_INCREMENT PRIMARY KEY, number VARCHAR(30) NOT NULL UNIQUE COMMENT '계좌 번호', password VARCHAR(20) NOT NULL, balance BIGINT NOT NULL COMMENT '계좌 잔액', -- COMMENT : 테이블에 주석을 포함시킴 user_id INT, created_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE TABLE history_tb ( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '거래 내역 ID', amount BIGINT NOT NULL COMMENT '거래 금액', w_account_id INT COMMENT '출금 계좌 ID', d_account_id INT COMMENT '입금 계좌 ID', w_balance BIGINT COMMENT '출금 요청된 계좌의 잔액', d_balance BIGINT COMMENT '입금 요청된 계좌의 잔액', created_at TIMESTAMP NOT NULL DEFAULT NOW() ); | cs |
- data.sql (샘플 데이터 입력 쿼리)
더보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | -- 유저 샘플 데이터 INSERT INTO user_tb(username, password, fullname, created_at) values('길동', '1234', '고', now()); INSERT INTO user_tb(username, password, fullname, created_at) values('둘리', '1234', '애기공룡', now()); INSERT INTO user_tb(username, password, fullname, created_at) values('콜', '1234', '마이', now()); -- 계좌 샘플 데이터 INSERT INTO account_tb(number, password, balance, user_id, created_at) values('1111', '1234', 900, 1, now()); INSERT INTO account_tb(number, password, balance, user_id, created_at) values('2222', '1234', 1100, 2, now()); INSERT INTO account_tb(number, password, balance, user_id, created_at) values('333', '1234', 0, 3, now()); -- 거래 내역 샘플 데이터 -- 이체 내역을 기록 ( 1번 계좌에서 2번 계좌로 100원을 이체 ) INSERT INTO history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at) VALUES (100, 900, 1100, 1, 2, now()); -- 출금 내역 ( 1번계좌에서 100원을 출금 처리 ) INSERT INTO history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at) VALUES (100, 800, null, 1, null, now()); -- 입금 내역 (1번 계좌에 500원 입금 처리 ) INSERT INTO history_tb(amount, w_balance, d_balance, w_account_id, d_account_id, created_at) VALUES (500, null, 700, null, 1, now()); | cs |
3. H2 Database 메모리 확인
- http://localhost:포트번호/h2-console
모델 클래스 설계
- INT → Integer
- VARCHAR(n) → String
- BIGINT → Long
- TIMESTAMP → Timestamp
더보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Data public class Account { private Integer id; private String number; private String password; private Long balance; private Integer userId; private Timestamp createdAt; public void withdraw(Long amount) { this.balance -= amount; } public void deposit(Long amount) { this.balance += amount; } } | cs |
320x100
반응형
'Java > Spring Boot' 카테고리의 다른 글
[Spring Code] 사용자 정의 예외 클래스와 에러 페이지 (0) | 2023.04.19 |
---|---|
[Spring Boot] MyBatis 설정 및 DAO 구현 (1) | 2023.04.18 |
[Spring Boot] 프로젝트 초기 세팅 (0) | 2023.04.14 |
[Spring Boot] yml 파일 (0) | 2023.04.14 |
[Spring Boot] Gradle 빌드 라이브러리 의존성 추가 (0) | 2023.04.14 |