plugins {
id 'org.springframework.boot' version '2.7.4'
id 'io.spring.dependency-management' version '1.0.14.RELEASE'
id 'java'
}
group = 'com.lsj'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
/** 추가 라이브러리 **/
// https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.58'
// https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api
implementation group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
tasks.named('test') {
useJUnitPlatform()
}
gradle 설정입니다.
package com.lsj.chatting;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
/** 하기 어노테이션 사용하려면 Javax Persistence API Gradle 추가 필요 **/
@Entity // 하기 필드 기준으로 DB에 User 테이블을 생성하라는 의미
public class BlogUser {
@Id // Primary key
@GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 DB의 넘버링 전략을 따라간다.
// → 즉, DB에 따라 AutoIncrement 또는 Sequence가 결정 되어서 알아서 만들어준다. (자동 증가 PK 필요함으로 이와 같은 행동 함)
// (MySql에서는 AutoIncrement, Oracle에서는 Sequence 사용)
private int id;
@Column(nullable = false, length = 30) // null 방지 및 길이 30
private String username;
@Column(nullable = false, length = 100)
private String password;
@Column(nullable = false, length = 50)
private String email;
@ColumnDefault("'user'") // → Column Default 값 String이기 때문에 ' ' 안에 넣어야한다.
private String role; // Enum을
// → admin : 0
// → user : 0
// → manager : 0
@CreationTimestamp // 현재 시각 바로 자동 입력
private Timestamp createDate;
}
어노테이션을 이용해 테이블 생성하기 위한 Java 파일 입니다.
server:
port: 8000 # 톰캣 포트 (스프링부트는 톰캣이 내장되어 있다.)
servlet:
context-path: /chatting # 기본 url Path
encoding:
charset: UTF-8
enabled: true
force: true
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
# @GetMapping 에서 함수의 return 값이 String인 경우 return 에 대한 내용은 jsp의 파일 이름입니다.
# @GetMapping
# public String callJsp(){
# return "home" → /WEB-INF/views/home.jsp 화면을 뿌려라
# 일반적으로 스프링부트는 JSP를 지원하지 않기 때문에 JSP를 사용하기 위해서는 JSP 해석 템플릿 엔진인 jasper을 Gradle에서 다운로드를 해야한다.
#}
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:orcl
username: c##root
password: 1234
jpa:
open-in-view: true
hibernate:
ddl-auto: create # 최초 전략 Applicaiton 재시작시 테이블 있으면 지우고 다시 만들게 된다.
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# field 명 그대로 필드를 만들게 된다.
# physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
# CamelCase 전략을 따라가는데 field 명이 myEmail인 경우 my_email로 변환시켜서 만들어준다.
use-new-id-generator-mappings: false
# false : JPA 기본 전략을 쓴다.
# false : JPA 기본 전략을 쓰지 않는다. → User에 선언한 GenerationType.IDENTITY을 쓰겠다
show-sql: true
properties:
hibernate.format_sql: true
jackson:
serialization:
fail-on-empty-beans: false
yml 파일로 JPA 사용할 설정이 들어있습니다.
Hibernate:
drop table BlogUser cascade constraints
Hibernate:
create table BlogUser (
id number(10,0) generated as identity,
createDate timestamp,
email varchar2(50 char) not null,
password varchar2(100 char) not null,
role varchar2(255 char) default 'user',
username varchar2(30 char) not null,
primary key (id)
)
시작시 Hibernate라는 애가 Java 파일 설정을 읽어서 Query를 생성시켜줍니다.