
📘>JPA(Java Persistence API)의 정의와 기본 메서드 정리
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java' //MySql 사용시.
}
- 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: 아무것도 안 함 (운영환경)
CREATE DATABASE "DB 이름";
save(entity) – 엔티티 저장 또는 수정 (UPDATE, INSERT)
findById(id) – ID로 엔티티 조회 (SELECT)
findAll() – 모든 엔티티 조회 (SELECT)
delete(entity) – 엔티티 삭제 (DELETE)
deleteById(id) – ID로 엔티티 삭제 (DELETE)
count() – 전체 엔티티 개수 조회
existsById(id) – 해당 ID의 엔티티 존재 여부 확인
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class User {
@Id
private Long id;
private String name;
private String email;
}
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
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);