Spring 기초 정리 - JPA 초기 세팅 및 기본사용법

Zyoon·2025년 5월 21일

Spring 기초정리

목록 보기
9/18
post-thumbnail

📘>JPA(Java Persistence API)의 정의와 기본 메서드 정리


JPA란?

  • JPA는 자바 ORM기술을 쉽게 사용할 수 있도록 지원하는 표준 인터페이스이다.
  • Spring 기반 라이브러리이기 때문에 Spring 환경에서 편리하게 사용할 수 있다.
  • SQL 없이도 메서드 이름만으로 데이터베이스 쿼리를 실행할 수 있다.
  • 생산성 향상과 유지보수 용이성을 위해 많이 사용된다.

초기 세팅

  • 의존성 추가 (Gradle 기준)
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'mysql:mysql-connector-java' //MySql 사용시.
}
  • application.properties
- MySQL 데이터베이스 연결 정보
spring.datasource.url=jdbc:mysql://localhost:3306/"DB 이름"
spring.datasource.username="mysql 이름"
spring.datasource.password="mysql 비밀번호"
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

-  JPA 설정
spring.jpa.hibernate.ddl-auto=update  # create, update, none, validate 중 선택
spring.jpa.show-sql=true              # 콘솔에 SQL 쿼리 출력
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

- ddl-auto 설명
create: 실행 시마다 테이블 새로 생성
update: 변경된 엔티티에 따라 테이블 자동 수정 (개발용)
validate: 테이블과 엔티티가 일치하는지 검증만 함
none: 아무것도 안 함 (운영환경)
  • MySQL DB 생성
CREATE DATABASE "DB 이름";

기본 메서드

save(entity) – 엔티티 저장 또는 수정 (UPDATE, INSERT)

findById(id) – ID로 엔티티 조회 (SELECT)

findAll() – 모든 엔티티 조회 (SELECT)

delete(entity) – 엔티티 삭제 (DELETE)

deleteById(id) – ID로 엔티티 삭제 (DELETE)

count() – 전체 엔티티 개수 조회 

existsById(id) – 해당 ID의 엔티티 존재 여부 확인 

간단한 예시 및 사용법

  1. Entity
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
}

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

public interface UserRepository extends JpaRepository<User, Long> {
}

  1. service
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    
    @Autowired
    private UserRepository userRepository;

    public void exampleUsage() {
        // 저장 (save)
        User user = new User();
        user.setId(1L);
        user.setName("이름");
        user.setEmail("email@gogle.com");
        userRepository.save(user);

        // 조회 (findById)
        User foundUser = userRepository.findById(1L).orElse(null);

        // 전체 조회 (findAll)
        List<User> allUsers = userRepository.findAll();

        // 개수 확인 (count)
        long totalUsers = userRepository.count();

        // 삭제 (deleteById)
        userRepository.deleteById(1L);
    }
}

커스텀 메서드

JpaRepository에서 기본적으로 제공하는 메서드가 아닌 인터페이스 안에 직접 설정을 해서 원하는 쿼리를 만들어 사용 할 수도 있다.

  • 커스텀 메서드 예시
public interface UserRepository extends JpaRepository<User, Long> {

    // 1. 단일 조건 검색
    User findByEmail(String email);
    List<User> findAllByAge(String age);

    // 2. 다중 조건 검색
    List<User> findByNameAndAge(String name, int age);

    // 3. 비교 조건
    List<User> findByAgeGreaterThan(int age);       // 초과
    List<User> findByAgeLessThanEqual(int age);     // 이하

    // 4. 포함/패턴 검색
    List<User> findByNameContaining(String keyword);   // 부분 포함
    List<User> findByEmailEndingWith(String suffix);   // 특정 도메인

    // 5. 정렬 및 페이징 (Pageable은 Spring Data에서 제공)
    List<User> findByAgeOrderByNameDesc(int age);
    Page<User> findAllByOrderByCreatedAtDesc(Pageable pageable);

    // 6. 존재 여부 확인
    boolean existsByEmail(String email);

    // 7. 개수 조회
    long countByAgeGreaterThan(int age);

    // 8. 삭제
    void deleteByEmail(String email);
}
  • 메서드 사용 예시
List<User> users = userRepository.findByNameContaining("아이유");
boolean exists = userRepository.existsByEmail("iyou123@gogle.com");
long count = userRepository.countByAgeGreaterThan(20);
profile
기어 올라가는 개발

0개의 댓글