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”임을 알려주는 역할을 한다!