2025๋ 5์ 7์ผ
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
Repository
์ธํฐํ์ด์ค๋ง ์ ์ํด๋ CRUD ์๋ ์ฒ๋ฆฌ ๊ฐ๋ฅspring.application.name=demo
# Server
server.port=8090
# Encoding ์ค์
spring.servlet.filter.encoding.filter-name=encodingFilter
spring.servlet.filter.encoding.filter-class=org.springframework.web.filter.CharacterEncodingFilter
spring.servlet.filter.encoding.init-param.encoding=UTF-8
spring.servlet.filter.encoding.init-param.forceEncoding=true
spring.servlet.filter.encoding.url-pattern=/*
# JSP ์ค์
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
server.servlet.jsp.init-parameters.development=true
# (์์) ๋ฐ์ดํฐ์์ค ์ค์ - MySQL
#spring.datasource.url=jdbc:mysql://localhost:3306/testdb
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.username=root
#spring.datasource.password=1234
# Hibernate ์ค์
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.jdbc.batch_size=1000
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true
spring.sql.init.mode=always
spring.jpa.defer-datasource-initialization=true
package com.example.demo.domain.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name="book")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Book {
@Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// ๐ ๊ธฐ๋ณธ ํค๋ฅผ DB์์ ์๋์ผ๋ก ์์ฑ (MySQL์ auto_increment ์ญํ )
@Column(name="bookcode")
private Long bookCode; // ์นด๋ฉ ํ๊ธฐ๋ฒ โ DB์์๋ book_code๋ก ๋ณํ๋จ
@Column(name="bookname")
private String bookName;
private String publisher;
private String isbn;
}
package com.example.demo.domain.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "user")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
@Id
@Column(length = 100) // varchar(100)
private String username;
@Column(length = 255, nullable = false)
private String password;
@Column(length = 255)
private String role; // ์: "USER", "ADMIN"
}
package com.example.demo.domain.repository;
import com.example.demo.domain.entity.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class BookRepositoryTest {
@Autowired
private BookRepository bookRepository;
@Test
public void t1() throws Exception {
// INSERT ์์
// Book book = Book.builder()
// .bookCode(1111L)
// .bookName("์ด๊ฒ์ด ๋ฆฌ๋
์ค๋ค")
// .publisher("ํ๋น๋ฏธ๋์ด")
// .isbn("1111-1111")
// .build();
// bookRepository.save(book); // ์ ์ฅ
// UPDATE ์์
// book.setBookName("JAVA์ ์ ์");
// book.setPublisher("์ด์งํผ๋ธ๋ฆฌ์ฑ");
// book.setIsbn("1111-22-3333");
// bookRepository.save(book); // ๋์ผํ ID๋ฉด update ์ฒ๋ฆฌ๋จ
// DELETE ์์
bookRepository.deleteById(1111L); // ํด๋น bookCode๋ก ์ญ์
}
}
@Entity
, @Id
, @Column
, @Builder
๋ฑ์ผ๋ก ์ ์๋๋ฉฐ, JPA๊ฐ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก SQL์ ์์ฑํด์ค๋ค..save()
, .deleteById()
๋ฑ์ ์ฌ์ฉํด CRUD ๋์์ ๊ฒ์ฆํ ์ ์๋ค.