본문 바로가기

SpringBoot

SpringBoot(12) - Spring Boot/JPA/MySQL 구조, 추가 정리 사항

728x90
반응형

1) SpringBoot

   1-1) Spring Boot/JPA/MySQL 구조

   1-2) 추가 정리 사항

 

 

 

 

 

1) SpringBoot

1-1) Spring Boot/JPA/MySQL 구조

 

 

 

(1) build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.3.1'
	id 'io.spring.dependency-management' version '1.1.5'
}

group = 'net.datasa'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'com.mysql:mysql-connector-j'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
	useJUnitPlatform()
}

 

 

(2) application.properties

spring.application.name=web3

#접속 포트번호
server.port=8888
#Context Path
server.servlet.context-path=/

#Logback 사용. 전체를 대상으로 로깅 레벨 지정
#error>warn>info>debug>trace
logging.level.root=info
#특정 패키지를 대상으로 로깅 레벨 지정
logging.level.net.datasa.web3=debug

#세션의 유지 시간 (기본값은 30분 = 1800초)
#단위 : s (seconds), m (minutes), h (hours), d (days)
server.servlet.session.timeout=60m

# MySQL 데이터베이스 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root

# JPA 설정
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql=trace

 

 

(3) [src/main/java] - [net.datasa.web3] 안에 HomeController.java 파일 생성 후 아래와 같이 작성

package net.datasa.web3;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {
	@GetMapping({"", "/"})
	public String home() {
		return "home";
	}
}

 

 

(4) [src/main/resources] - [templates] 안에 home.html 파일 생성 후 아래와 같이 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web3</title>
</head>
<body>
	<h1>[ web3 ]</h1>
	
	<p>
		<a href="test">저장 테스트</a>
	</p>
</body>
</html>

 

 

(5) [src/main/java] - [net.datasa.web3] 안에 PersonEntity.java 파일 생성 후 아래와 같이 작성

package net.datasa.web3;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;

@Data
@Entity
@Table(name="person")
public class PersonEntity {
	@Id
	@Column(name = "id", nullable = false, length = 30)
	private String id;
	
	@Column(name = "name", length = 50)
	private String name;
	
	@Column(name = "age")
	private Integer age;
}

 

 

(6) [src/main/java] - [net.datasa.web3] 안에 PersonRepository.java 파일(인터페이스로 생성함) 생성 후

아래와 같이 작성

package net.datasa.web3;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface PersonRepository extends JpaRepository<PersonEntity, String> {

}

 

 

(7) [src/main/java] - [net.datasa.web3] 안에 PersonService.java 파일 생성 후 아래와 같이 작성

package net.datasa.web3;

//import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service
public class PersonService {
	
//  이렇게 작성해도 되지만 아래의 방식이 더 권장된다!
//	@Autowired
//	PersonRepository PersonRepository;
	
	private final PersonRepository personRepository;
	
	public void test() {
		PersonEntity entity = new PersonEntity();
		entity.setId("abcde2");
		entity.setName("김길동");
		entity.setAge(22);
		
		personRepository.save(entity);
	}
}

 

 

(8) [src/main/java] - [net.datasa.web3] 안에 PersonController.java 파일 생성 후 아래와 같이 작성

package net.datasa.web3;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Controller
public class PersonController {
	
	private final PersonService personService;
	
	@GetMapping("test")
	public String test() {
		personService.test();
		return "redirect:/";
	}
}

 

 

(9) 결과 화면

첫 접속 화면

 

 

"저장 테스트" 문구 클릭 전 DBeaver 화면

 

 

"저장 테스트" 문구 클릭 후 DBeaver 화면

 

 

 

 

1-2) 추가 정리 사항

@Entity를 붙이면 자동으로 table을 만들어준다!

@Table(name="person")은 테이블 이름이 “person”임을 알려주는 역할을 한다!