1. Spring Data JPA : CrudRepository
Spring Data JDBC 라이브러리는 CrudRepository 인터페이스를 제공한다.
CrudRepository는 Spring Data JPA에서 제공하는 기본 CRUD (Create, Read, Update, Delete) 작업을
처리하기 위한 인터페이스이다. CrudRepository는 엔티티 객체의 기본적인 데이터 조작을 간단하게 수행할 수
있도록 설계되어 있다.
💡 CrudRepository의 개요
JPA와 Spring Data의 기본적인 데이터 접근 작업을 쉽게 수행할 수 있게 해 준다.
💻 CrudRepository의 기본 구조 (T : 엔티티 클래스의 타입, ID : 엔티티의 기본 키(PK) 타입)
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
Optional<T> findById(ID id);
Iterable<T> findAll();
long count();
void deleteById(ID id);
void delete(T entity);
void deleteAll();
}
📌 CrudRepository의 주요 메소드
메소드 | 설명 | 예제 |
save(S entity) | 엔티티를 저장하거나 업데이트 | userRepository.save(new User("tom", "oscar")); |
findById(ID id) | ID로 엔티티를 조회 | Optional<User> user = userRepository.findById(1L); |
findAll() | 모든 엔티티를 조회 | Iterable<User> users = userRepository.findAll(); |
count() | 전체 엔티티 수를 반환 | long userCount = userRepository.count(); |
deleteById(ID id) | ID로 엔티티를 삭제 | userRepository.deleteById(1L); |
delete(T entity) | 주어진 엔티티를 삭제 | userRepository.delete(existingUser); |
deleteAll() | 모든 엔티티를 삭제 | userRepository.deleteAll(); |
💻 CrudRepository의 사용 예시 코드
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private Long id;
private String firstName;
private String lastName;
// Constructors, getters, setters
}
엔티티 클래스는 @Entity 어노테이션을 사용하여 정의한다.
스프링 데이터 JPA : CrudRepository란?
CrudRepository는 스프링 데이터 JPA에서 제공하는 기본 CRUD (Create, Read, Update, Delete) 작업을 처리하기 위한 인터페이스이다. CrudRepository는 엔티티 객체의 기본적인 데이터 조작을 간단하게 수행할 수
cafe.daum.net
- 출처 : 데이터 과학자 + 프로그래머 세상 다음카페
[Web] Spring Data JPA 개념 및 메소드 사용법 알아보기
안녕하세요 데브당에입니다. 최근 Spring으로 웹 프로젝트를 개발하면서 JPA를 처음 사용해보았습니다. 이 과정에서 자연스럽게 Spring Data JPA까지 알아보게 되었습니다. 오늘은 직관적인 코드 구현
devdange.tistory.com
- 참고 : devdange
2. JPA 구조 (Spring Data JPA와의 차이)
JPA는 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
JPA는 ORM (Object-Relational Mapping) 기술의 표준 명세로, 구현체가 아닌 인터페이스의 모음이다.
💡 JPA의 주요 구성 요소
- EntityManagerFactory
EntityManager 인스턴스를 생성한다. - EntityManager
엔티티의 저장, 수정, 삭제, 조회 등 엔티티와 관련된 모든 작업을 처리한다. - Entity
데이터베이스의 테이블과 매핑되는 Java 객체이다. - Persistence Context
엔티티를 영구 저장하는 환경이다. - Query
데이터베이스에 질의하기 위한 객체이다.
💡 JPA 구현체
- Hibernate
- EclipseLink
- OpenJPA
Spring Data JPA는 JPA를 쉽게 사용할 수 있도록 추상화한 Spring의 하위 프로젝트이다.
📌 Spring Data JPA와 JPA의 주요 차이점
특성 | JPA | Spring Data JPA |
추상화 수준 | 낮음 (더 많은 보일러플레이트 코드) | 높음 (적은 코드로 구현 가능) |
구현 방식 | EntityManager 직접 사용 | Repository 인터페이스 사용 |
쿼리 메소드 | JPQL 또는 Criteria API 사용 | 메소드 이름으로 쿼리 자동 생성 |
페이징 및 정렬 | 수동 구현 필요 | 내장 지원 |
트랜잭션 관리 | @Transactional 사용 | 자동 트랜잭션 관리 |
💻 예시 코드 (JPA, Spring Data JPA)
@PersistenceContext
private EntityManager entityManager;
public User findById(Long id) {
return entityManager.find(User.class, id);
}
public List<User> findAll() {
return entityManager.createQuery("SELECT u FROM User u", User.class).getResultList();
}
public void save(User user) {
entityManager.persist(user);
}
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastName(String lastName);
}
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
}
public List<User> findAll() {
return userRepository.findAll();
}
public void save(User user) {
userRepository.save(user);
}
}
JPA 구조는 어떻게 되어있고 spring-data-jpa와는 뭐가 다를까?
JPA는 Java Persistence API로, 자바 객체와 DB를 매핑하기 위한 인터페이스를 제공하는 자바 ORM 기술의 표준 명세입니다. SQL Mapper ORM sql과 객체를 매핑 DB와 객체를 매핑 mybatis, jdbcTemplate 등 hibernate, Eclip
tape22.tistory.com
- 참고 : tape22
3. application.yml
application.yml은 Spring Boot 애플리케이션의 설정을 YAML 형식으로 관리하는 파일이다.
application.properties와 동일한 목적을 가지지만, 계층적 구조를 가진 설정에 더 적합하다.
💡 YAML의 주요 특징
- 계층적 구조
들여 쓰기로 구조를 표현 - 가독성
복잡한 설정을 더 읽기 쉽게 표현 - 타입 추론
값의 타입을 자동으로 추론 (String, Int, Boolean 등) - 리스트 표현
하이픈(-)을 사용하여 간단히 표현
💻 예시 코드
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver // 한 칸 공백이 있어야함..!
url: jdbc:mysql://localhost:3306/test_db?serverTimezone=Asia/Seoul
username: root
password: $%1234%$
📌 YAML의 주요 문법
문법 | 설명 | 예시 |
키-값 쌍 | 콜론(;)으로 구분 | key:value |
계층 구조 | 들여쓰기로 표현 | parent:<br> child:value |
리스트 | 하이픈(-)으로 표현 | lisf:<br> -item1<br> -item2 |
여러 줄 문자열 | 파이프( | )로 시작 |
Spring application.yml 관리하기
Spring boot 2.4 버전부터 적용되는 방법입니다. 기밀 정보 분리의 필요성 Spring에서는 애플리케이션의 설정 정보를 관리하는 파일이 있는데, resoures폴더의 application.yml (.properties)가 바로 그 프로필
velog.io
- 참고 : devlog
4. application.properties JPA설정
application.properties 파일에서 JPA 관련 설정을 관리할 수 있다.
이 설정들은 JPA의 동작 방식, 데이터베이스 연결, 로깅 등을 제어한다.
📌 주요 JPA 설정 항목
설정 항목 | 설명 | 예시 |
spring.jpa.hibernate.ddl-auto | 데이터베이스 스키마 자동 생성 설정 | update, create, create-drop, validate, none |
spring.jpa.show-sql | SQL 쿼리 로깅 여부 | true, false |
spring.jpa.properties. hibernate.format_sql |
SQL 포멧팅 여부 | true, false |
spring.jpa.database-platform | 데이터베이스 방언 설정 | org.hibernate.dialect. MariaDBDialect |
🛠️ MariaDB JDBC드라이버를 프로젝트 의존성에 추가해야 한다.
Maven을 사용한다면 아래의 코드를 pom.xml에 추가하자.
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
Gradle을 사용한다면 build.gradle에 아래의 코드를 추가하자.
implementation 'org.mariadb.jdbc:mariadb-java-client'
[스프링부트 게시판] 6. application.properties 설정
이번 게시글에서는 스프링부트의 전반적인 설정을 담당하는 application.properties 설정에 대해 설명드리려고 합니다. 먼저 .properties 에 대해서 간단히 말씀드릴 것은 'Key=Value형식으로 파라미터 정보
mun9659.tistory.com
- 참고 : mun9659
'에이콘아카데미 회고 > 5회차) 자바기반 풀스택 개발자 양성과정' 카테고리의 다른 글
Spring, Spring Boot) 65번째 회고 (0) | 2024.07.24 |
---|---|
Spring, Spring Boot) 64번째 회고 (0) | 2024.07.23 |
Spring, Spring Boot) 62번째 회고 (0) | 2024.07.17 |
Spring, Spring Boot) 61번째 회고 (0) | 2024.07.16 |
Spring, Spring Boot) 60번째 회고 (0) | 2024.07.12 |