[Spring Boot] TRM (Table Relational Mapping) 기반 모델링

2023. 4. 14. 18:26·Java/Spring Boot
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()
);
Colored by Color Scripter
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());
Colored by Color Scripter
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;
    }
    
}
Colored by Color Scripter
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
'Java/Spring Boot' 카테고리의 다른 글
  • [Spring Code] 사용자 정의 예외 클래스와 에러 페이지
  • [Spring Boot] MyBatis 설정 및 DAO 구현
  • [Spring Boot] 프로젝트 초기 세팅
  • [Spring Boot] yml 파일
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (384)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (16)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    HTML
    vuejs
    js
    SQL
    git
    typeScript
    SpringBoot
    Codeigniter
    SWAGGER
    CSS
    java
    면접
    cs
    C#
    티스토리챌린지
    http
    Hotkeys
    jQuery
    errorNote
    오블완
    Android
    jsp
    php
    zapier
    Wordpress
    Swing
    tailwindcss
    SEO
    개발일지
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Spring Boot] TRM (Table Relational Mapping) 기반 모델링
상단으로

티스토리툴바