thymeleaf 게시판 - 회원가입 화면까지
로그정보만 넣으면 됨
파일 업로드 처리를 하려면 webapp까지는 만들어야 한다.
html 파일로 만들어서 작성
jsp에서 사용하던 것과 다름 view 없음
세션 정보을 불러올 때에는 session. 으로 불러온다.
redirect일 때에는 변수명만 작성
dao, dto, service, controller
* build 자동 설정
JPA(Java Presistence API)
자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 관련 API
* 관계형 데이터베이스(RDB)
테이블(엔티티)과 테이블 간의 관계로 데이터를 저장하는 방식의 데이터 베이스
예) My SQL, 오라클, 마리아DB 등
HIbernate : JPA의 구현체
JPA는 인터페이스, Hibernat는 구현 클래스
Spring Data JPA : JPA와 HIbernate를 사용하기 쉽게 만든 Spring 라이브러리
Entity 클래스(DTO)를 구현하면 해당 클라스에서 지정한 테이블 이름 및 컬럼이름으로 DB 테이블을 자동으로 생성하며, DB CRUD에 대한 메소드로 제공한다.
메소드 이름으로 SQL 쿼리문을 생성하는 방식을 사용한다.
application.properies 설정
- DebTools(Thymeleaf) 설정
- static resource
- Datasource(DB) 설정
- JPA 설정
- DB log 설정
프로젝트마다 setting 해줘야 한다.
spring.devtools.livereload.enabled=true
spring.devtools.restart.enabled=true
spring.thymeleaf.cache=false
# static resource
spring.web.resources.static-locations=classpath:static/
# data source
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/berrydb?serverTimezone=Aisa/Seoul
spring.datasource.username=buser
spring.datasource.password=12341234
# JPA setting
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=update
# JPA Log setting(DB log)
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
logging.level.org.hibernate.type.descriptor.sql=trace
JPA 초기화 전략 설정(a.k.a JPA 설정)
spring.jpa.generate-ddl : true로 설정하면 해당 데이터를 근거로 서버 시작 시에 DDL 문을 생성하여 DB에 적용
DDL 생성 시 데이터베이스 고유의 기능을 사용하는지에 대한 유무 체크(잘 처리 되지 않아서 false로 설정)
spring.jpa.hibernate.ddl-auto : 'create table' 관련 설정 (실질적으로 사용)
- none : 아무런 작업도 하지 않음(DB에 테이블을 따로 생성) (mysql에 설정된 것을 사용)
- creat : 서버가 시작할 때 기본 테이블을 DROP 하고 새 DDL을 실행(테이블 재생성) (매법 새로운 시작이기 때문에 잘 사용하지 않음)
- create-drop : 서버가 시작할 때 DROP 및 CREATE하고, 서버가 종료될 때 DROP 실행(잘 사용하지 않음)
- update : 기존 테이블에 해당하는 Entity 클래스가 변경되면 기존 테이블을 DROP하고, 새 클래스에 맞게 테이블 생성
변경된 내용이 없으면 테이블 유지(많이 사용)
- validate : Entity와 테이블이 잘 맵핑되어 있는지 확인하여, 맞지 않을 경우 프로그램을 종료시킴
spring.jpa.database-platform : 각 DBMS에 맞게 SQL을 생성하도록 도와주는 dialect(방언)객체를 지정.(명확성)
간단한 테이블 명세
테이블명 ; jpatbl
컬럼 >
- code : 자동증가 처리, 기본키
- strdata : 문자열 저장, 길이 50자, 필수입력
- intdata : 정수저장, null 허용
- regdate : 저장 날짜시간 저장, 기본값.
Entity class
DB 테이블과 연계하기 위한 클래스
DTO의 역할도 함께 처리할 수 있음(따로 작성하는 경우가 일반적, 작은 프로젝트의 경우 DTO는 작성하지 않고 처리 가능)
워크벤치랑 같이 사용하면 렉이 걸리는 경우가 있으므로 닫아놓고 사용
package com.raspberry.jpaprj.entity;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import java.sql.Timestamp;
@Entity
// 테이블명 지정
@Table(name = "jpatbl")
@Data
public class jpaData {
@Id
// mysql 자동증가 설정, long으로 설정
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long code;
// 데이터 베이스는 대소문자를 가리지 않기 때문에 _를 사용, not null = false, 길이
@Column(name = "str_data", nullable = false, length = 50)
private String strdata;
@Column(name = "int_data")
private int intdata;
@Column(name = "reg_date")
@CreationTimestamp
private Timestamp regdate;
}
사용하는 어노테이션
1) @Entity : entity 임을 선언하는 어노테이션(DB DDL 생성 시 활용)
2) @Table : DB 테이블의 이름을 지정, 생략 시 클래스 이름을 테이블 생성(명시적으로 작성해 주는 것이 좋다.)
테이블명은 스네이크케이스('_')을 사용하는 것을 권장(클래스명 카멜케이스, 테이블 스네이크케이스)
3) @Id : 필드를 테이블의 기본키로 설정하는 어노테이션
4) @GeneratedValue : 자동으로 생성되는 키 값에 대한 설정
My SQL의 Auto-Increment는 GenerationType.IDENTITY로 설정
DBMS마다 설정 값이 다르다. 오라클은 GenerationType.AUTO
5) @Column : 필드를 테이블의 컬럼으로 설정하는 어노테이션(생략 시 필드명으로 컬러명 생성)
다음 옵션으로 여러설정을 할 수 있다.
- name : 필드명과 다르게 컬럼명을 지정
- nullable : false - > not null. 생략 시 null 허용 컬럼
- length : 컬럼의 길이 지정
- columnDefinition : 그 외 컬럼의 제약 조건 설정
예) 날짜 타입의 기본값을 설정하는 경우
columnDefinition = "DATE DEFAULT CURRENT_DATE"
6) @ColumnDefault("값") : 컬럼의 기본값을 설정. 문자열
예) 정수형 컬럼에 기본값 0
@ColumnDefalut("0")
7) @CreationTimestamp/@UpdateTimestamp(수정)
insert 또는 update 날짜 시간을 기본값으로 설정(datetime 타입에서 사용)
8) @Transient : 컬럼으로 생성하지 않는 필드에 붙이는 어노테이션
Repository 인터페이스
DAO 역할을 하는 인터페이스. 이 인터페이스 내부에 다양한 작업을 위한 메소드를 작명 규칙에 맞게 작성.
작명 규칙 참고 사이트 : https://zara49.tistory.com/130
'공부기록 > Spring' 카테고리의 다른 글
10월 19일 MVC 패턴이란? (전자정부프레임워크) (0) | 2023.10.19 |
---|---|
5월 10일 (1) Spring - JSP (0) | 2023.05.10 |
5월 9일 (2) Spring - 출력 (0) | 2023.05.09 |
5월 9일 (1) Spring - 데이터 전송 방식 (0) | 2023.05.09 |
5월 8일 (2) Spring - Java로 spring 사용하기 html 연결 (0) | 2023.05.08 |