스프링 16

[JPA] 영속성 관리[5]

병합 : merge()merge() 메소드는 준영속 상태의 엔티티를 받아서 그 정보로 새로운 영속 상태의 엔티티를 반환한다.public class ExamMergemain {    static EntityManagerFactory emf =        Persistence.createEntitymanagerFactory("jpabook");        public static void main(String args[]) {        Member member = createMember("memberA", "회원1");        member.setUsername("회원명변경");        mergeMember(member);        }     static Member createMembe..

스프링 2024.12.10

[JPA] 영속성 관리[4]

플러시 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 과정이다.변경 감지가 동작해서 영속성 컨텍스트의 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다.쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다 영속성 컨텍스트를 플러시하는 방법 em.flush() 직접 호출트랜잭션 커밋 시 자동 호출JPQL 쿼리 실행 시 자동 호출 플러시 모드 옵션 엔티티 매니저에 플러시 모드를 직접 지정하려면 javax.persistence.FlushModeType을 사용하면 된다.FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시(기본값)FlushModeType.COMMIT : 커밋할 때만 플러시 * 플러..

스프링 2024.12.09

[JPA] 영속성 관리[3]

엔티티 등록EntityManagerFactory emf = Persistence.createEntityManagerFactory("jakarta.persistence");EntityManager em = emf.createEntityManager();EntityTransaction tx = em.getTransaction();//엔티티 매니저는 데이터 변경 시 트랜잭션을 시작해야한다.tx.begin();        em.persist(memberA);em.persist(memberB);//여기까진 insert sql을 데이터베이스에 보내지 않는다.        //commit하는 순간 insert sql을 보낸다.tx.commit();Colored by Color Scriptercs 엔티티 매니저는 트..

스프링 2024.11.27

[JPA] 영속성 관리[2]

영속성 컨텍스트의 특징 1. 영속성 컨텍스트는 엔티티를 식별자 값(@Id)으로 구분한다.    따라서 영속 상태는 식별자 값이 반드시 있어야 한다.2. 영속성 컨텍스트에 엔티티를 저장하면 JPA는 트랜잭션을 커밋하는 순간 엔티티를 데이터베이스에 반영하며, 이것을 플러시(flush)라 한다.3. 영속성 컨텍스트가 엔티티를 관리하면 다음과 같은 장점이 있다.1차 캐시동일성 보장트랜잭션을 지원하는 쓰기 지연변경 감지지연 로딩 엔티티 조회 영속성 컨텍스트는 내부에 캐시를 가지고 있는데 이것을 1차 캐시라 한다. 영속 상태의 엔티티는 모두 이곳에 저장된다.1차 캐시의 키는 식별자 값(@Id)이고 이 값은 데이터베이스 기본 키와 매핑되어 있다.ex) Member member = em.find(Member.class..

스프링 2024.11.26

[JPA] 영속성 관리[1]

엔티티 매니저 엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회하는 등의 일을 처리한다. 엔티티를 관리자는 관리자인셈.엔티티 매니저는 엔티티 매니저 팩토리에서 생성하여 사용한다.  영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어로 "엔티티를 영구 저장하는 환경" 이라는 뜻이다.엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.ex) em.persist(member);-> persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 엔티티의 생명주기 1. 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계 없는 상태순수한 객체 상태이며 저장하지 않은 상태ex)Member member = new M..

스프링 2024.11.25

[Spring Boot] 동적 쿼리 처리를 위해 Querydsl 알아보기

Querydsl ? - JPA의 쿼리 메서드의 기능과 @Query를 통해 많은 기능을 구현 할 수는 있지만, 선언할 때 고정된 형태의 값을 가지는 단점이 있다. 이러한 경우엔 동적으로 쿼리를 생성하여 처리할 수 있는 Querydsl을 사용한다. - Querydsl은 작성된 엔티티 클래스는 그대로 이용하는 것이 아닌 'Q도메인'이란 것을 이용해야 하고, 이 과정에서 추가적인 설정이 필요하다. querydsl을 위한 설정 추가 (본인은 스프링부트 2.7.7 기준으로 작성) - build.gradle 파일에 다음과 같은 내용을 처리하자. 1. plugins 항목에 querydsl 관련 부분을 추가 2. dependencies 항목에 필요한 라이브러리 추가 3. Gradle에서 사용할 추가적인 항목 추가 bui..

스프링 2023.02.13

[Spring Boot] Thymeleaf를 활용해보자(2)

Thymeleaf에서의 링크처리 Thymeleaf의 링크는 '@{}'를 이용한다. @GetMapping({"/ex2", "/exLink"}) public void exModel(Model model) { List list = IntStream.rangeClosed(1,20).asLongStream(). mapToObj(i->{ SampleDTO dto = SampleDTO.builder() .sno(i) .first("First.."+i) .last("Last.."+i) .regTime(LocalDateTime.now()) .build(); return dto; }).collect(Collectors.toList()); model.addAttribute("list", list); } Colored by ..

스프링 2023.01.12

[Spring Boot] Thymeleaf를 활용해보자(1)

Thymeleaf '템플릿 엔진'의 일종으로 HTML에 속성을 추가해 페이지에 값을 추가하거나 처리 할 수 있다. Thymeleaf를 사용하는 이유? 1. JSP와 유사하게 ${}을 별도의 처리 없이 이용할 수 있다. 2. Model에 담긴 객체를 화면에서 Javascript로 처리하기 편하다. 3. 연산이나 포맷 기능을 추가적인 개발 없이 지원한다. 기본적인 사용방법 기존의 속성 앞에 'th:'를 붙여주고 값을 지정해준다. JSP와 달리 별도의 태그를 이용하지 않아도 되며 Thymeleaf는 HTML은 그대로 두고 값을 추가하는 방식이다. Title Colored by Color Scripter cs 일반적으로 JSP에서 foreach문으로 리스트를 돌리는 것과 다르게 li 태그 내에 th:each라는..

스프링 2023.01.12

[Spring] @Query 어노테이션에 대해 알아보자

@Query 어노테이션 Spring Data JPA가 제공하는 쿼리 메소드는 간단한 검색 기능의 경우는 편리하게 사용 할 수 있지만 조인이나 복잡한 조건을 처리해야 하는 경우엔 불편할 때가 많다. @Query의 경우 메서드의 이름과 상관없이 메서드에 추가한 어노테이션을 통해 처리가 가능하다. @Query의 value는 JPQL(Java Persistence Query Language)로 작성하는데 흔히 '객체지향 쿼리'라 불리는 구문들이다. @Query로 할 수 있는 작업들 - 필요한 데이터만 선별적으로 추출하는 기능이 가능 - 데이터베이스에 맞는 순수한 SQL을 사용하는 기능 - insert, update, delete와 같은 select가 아닌 DML을 처리하는 기능(@Modifying과 함께 사용)..

스프링 2023.01.09

[Spring] 쿼리 메서드(Query Methods)에 대해 알아보자

쿼리 메서드? 말 그대로 '메서드의 이름 자체가 쿼리문'이 되는 기능이다. 쿼리 메서드는 주로 'findBy 나 getBy..'로 시작하고 이 후 And, Or와 같은 키워드를 이용한다. 사용하는 키워드에 따라서 파라미터의 개수가 결정된다. 예를 들어, Spring Data JPA 문서를 보면 findByStartDateBetween은 ...where x.startDate between ?1 and ?2 라고 설명되어 있듯 해당 키워드는 2개의 변수가 필요하다는걸 알 수 있다. 리턴 타입도 select를 하는 작업은 List나 배열을 이용 할 수 있고, 파라미터에 Pageable이 들어간는 경우엔 무조건 Page로 이용해야 한다. 테스트 코드를 통해 알아보자. Repository 인터페이스에 추가 pub..

스프링 2023.01.09
728x90
반응형