H2 DB 연결
- 자바 프로젝트에서 데이터베이스에 접근하는 방법 4가지
- JDBC Driver Class
- Connection, Statement, ResultSet
- JDBC Template Class
- MyBatis(iBatis)
- XML에 SQL을 넣어서 사용
- JPA
- SQL을 사용하지 않는다.
- JDBC Driver Class
- 스프링부트 H2 데이터베이스 연결 방법
- dependencies
- runtimeOnly 'com.h2database:h2' 추가
- application.properties 추가
-
# H2 Database # H2 DB 콘솔화면을 활성화 spring.h2.console.enabled=true # H2 DB 콘솔화면 경로 (localhost:8080/h2-console) spring.h2.console.path=/h2-console # in-memory DB로 설정한다. spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver # file DB #spring.datasource.url=jdbc:h2:~/testdb #spring.datasource.driver-class-name=org.h2.Driver
-
- dependencies
- 스프링부트 JPA 연결 방법
- dependencies
- implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 추가
- application.properties
-
# Datasource JPA spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create # show JPA generated SQL spring.jpa.show-sql=true # pretty sql format spring.jpa.properties.hibernate.format_sql=true # binding parameter show logging.level.org.hibernate.type.descriptor.sql=trace
-
- spring.jpa.hibernate.ddl-auto= 종류
- none
- 아무것도 안함
- create
- 엔티티 클래스대로 테이블 생성
- create-drop
- create 옵션과 동일하나 종료 시점에 테이블을 DROP 한다.
- update
- 테이블이 없다면 생성, 변경사항이 있다면 업데이트
- validate
- 테이블 생성 및 업데이트는 하지않고, 검사만 한다.
- none
- dependencies
- 스프링부트 H2 데이터베이스 테이블 생성 방법
- resources 폴더 안에 db.sql 추가
- 예시
-
-- 회원가입 DB 만들기 -- H2 Database SQL -- 테이블 삭제 DROP TABLE IF EXISTS member CASCADE; -- 테이블 생성 (H2 DB SQL 문법으로 작성) CREATE TABLE member ( id bigint generated by default as identity, user_id varchar(255), user_pw varchar(255), user_name varchar(255), user_role varchar(255), joindate date default CURRENT_TIMESTAMP() ); -- ROW 추가 INSERT INTO member VALUES (1, 'hong', '1234', '홍길동', 'ROLE_USER', '2023-09-09'); INSERT INTO member VALUES (2, 'tom', '1234', '톰아저씨', 'ROLE_USER', '2023-09-09'); INSERT INTO member VALUES (3, 'admin', '1234', '관리자', 'ROLE_ADMIN', '2023-09-09'); -- 검색 SELECT * FROM member; -- 커밋하기 (실제 물리적으로 파일에 쓰기) commit;
-
- 예시
- 엔티티 클래스 생성
- 엔티티 클래스위에 @Entity 어노테이션 추가
- @Table(name=”테이블명”) 어노테이션 추가
- 테이블의 컬럼명 그대로 멤버 변수 작성
- id (또는 primary key 컬럼) 멤버변수 위에 @Id, @GeneratedValue(strategy = GenerationType.IDENTITY) 어노테이션 추가
- 나머지 멤버 변수는 @Column(name=”컬럼명”) 어노테이션 추가
- 날짜 관련 멤버 변수가 있다면 @DateTimeFormat(pattern = “yyyy-mm-dd”) 어노테이션 추가하여 날짜 형식 지정
- 엔티티 클래스에 @Getter 어노테이션 추가 (@Setter 사용은 비추천)
- @Builder, @AllArgsConstructor, @NoArgsConstructor 어노테이션 추가
- resources 폴더 안에 db.sql 추가
- DB 관련 어노테이션
- @Entity
- DB 테이블과 1:1로 매칭되는 JPA 클래스
- @Table
- 클래스 이름이 테이블 이름으로 자동으로 설정되는데, 이럴때 테이블명 직접 지정할 때 사용
- @Id
- 기본키 id 열로 사용
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- GenerationType 종류
- IDENTITY
- MySQL, MariaDB, PostreSQL, H2DB
- SEQUENCE
- Oracle, PostreSQL
- AUTO
- 자동 선택
- IDENTITY
- GenerationType 종류
- @Column(name=”컬럼명”)
- 해당 멤버 변수의 컬럼명 지정
- @DateTimeFormat(pattern = “yyyy-mm-dd”)
- Date 데이터를 가져올 때 날짜 형식 사용자 지정 가능
- @RequestParam @ModelAttribute 매핑
- @JsonFormat
- @RequestBody @ResposeBody 매핑
- @Entity
- 데이터 모델링 클래스 종류
- Entity 클래스
- DB 테이블과 Entity 클래스는 1:1 매칭(연결)
- 로직 코드를 작성하면 안된다.
- JPA에서 사용한다.
- DTO 클래스 (Data Transfer Object)
- 다른 계층 간에 데이터 교환을 위해 데이터를 변형하여 사용하는 객체
- 로직 코드를 가지고 있지 않고, 순수하게 getter/setter로 이루어져 있다.
- 엔티티 클래스에 있는 모든 멤버변수(컬럼)을 사용할 필요없이 원하는 컬럼만 담는 DTO를 만들어 사용할 수 있다.
- VO 클래스 (Value Object)
- DTO 클래스와 동일한 개념이지만 Getter만 가지는 Read Only의 속성을 갖고있다.
- DAO 클래스 (Data Access Object)
- DB에 실제 접근하여 CRUD 하는 객체를 말한다.
- JPA의 Repository를 사용하는 경우를 말한다.
- Entity 클래스
'Computer Science > Database' 카테고리의 다른 글
[Database] Spring Boot 프로젝트와 MySQL DB 연결 (MVC, DTO) (0) | 2024.04.06 |
---|---|
[Database] Java Project와 MySQL DB 연결 (JDBC) (0) | 2024.03.18 |
[Database] AWS RDS 데이터베이스 배포 및 연결 (0) | 2024.01.12 |
[Database] ElephantSQL 데이터베이스 배포 및 연결 (0) | 2024.01.12 |