일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- spring
- Open EntityManager
- JPA프록시
- JPAmapping
- OSIV
- jpa
- JDBC connection pool
- jpqlquery
- 스프링부트
- springbootH2
- 스프링부트기본설정
- 에이치투데이터베이스
- JPA값타입
- gitinitial
- MySqlType
- dockercmd
- springbootproxy
- 제이피큐엘쿼리
- embededtype
- sql
- Git
- 이해와 원리
- JPA Hint & Lock
- 임베디드타입
- springboot기본설정
- javageneric
- JPAproxy
- 데이터베이트h2
- httppie
- 자바제너릭
- Today
- Total
목록Java/JPA (20)
빡코
Transaction? 쪼갤 수 없는 단위로 한번에 성공 또는 실패하는 것을 의미 한다. 시작: start transaction 완료: commit 실패처리: rollback 영속성 컨텍스트? 테이블과 매핑된 Entity 객체를 관리/보관하는 역할 1. 변경감지(Dirty Check): 영속성 컨텍스트 안에서 불러와진 Entity는 명시적으로 save 를 해주지 않더라도 알아서 변경을 감지하여 저장 2. 쓰기지연: 트랜잭션이 commit 되는 시점에 SQL을 한번에 모아서 DB에 반영한다. 3. 1차 캐싱: entity의 Id를 기준으로 기억하는 기능, 같은 Id로 조회시 총 1번의 select 쿼리만 날라간다.
Spring Data JPA ? 복잡한 JPA 코드를 스프링과 함께 쉽게 사용할 수 있도록 도와주는 라이브러리 Spring Data JPA > JPA(ORM) > Hibernate(JPA 구현체) > JDBC 를 사용한다. JpaRepository를 상속 받은 UserRepository public interface UserRepository extends JpaRepository { Optional findByName(String name); //find: 1건을 가져옴, 반환타입 ? 객체 or null 반환 Boolean existsByName(String name); //쿼리 결과가 존재하는지 확인, 반환타입 boolean long countByAge(Integer age); //SQL의 결과 개수..
스프링부트 3.0 + java 17 build.gradle 설정 파일 plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.1.0' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-s..
새로운 엔티티를 판단하는 기본전략 -식별자가 객체일 때 null로 판단 > 새로운 것으로 판단 -식별자가 자바 기본타입일 때 0으로 판단 ex) private long id ; 자바의 기본형이기 때문에 객체가 아니고, Null을 넣을 수 없기 때문에 0으로 판다 - Persistable인터페이스를 구현해서 판단로직 변경가능(실무에서 사용) id 값이 자동생성이 아닌 특별한 경우에 의하여 직접 채번이 된다고 가정해보자 . @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Item { @Id private String id; public Item(String id) { this.id = id; } } @SpringB..
@Repository적용: JPA 예외를 스프링이 추상화한예외로 변환 @Transactional트랜잭션적용 JPA의 모든 변경은 트랜잭션 안에서 동작 스프링데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션처리서 비스계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션시작 서비스계층에서 트랜잭션을 시작하면 리파지토리는해당트랜잭션을전파받아서 사용 그래서 스프링데이터 JPA를 사용할 때트랜잭션이 없어도 데이터등록, 변경이 가능했음 (사실은 트랜잭션이 리포지토리계층에 걸려있는 것임) @Transactional(readOnly = true) 데이터를 단순히 조회만 하고 변경하지 않는 트랜잭션에서 readOnly = true옵션을 사용하면 플러시를 생략해서 약간의 성능향상을 얻을 수 있음 자세한 내..
도메인클래스컨버터 *조회용으로만 사용할 것 HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티 객체를 찾아서 바인딩 package study.datajpa.controller; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import study.datajpa.entity.Member; import study.datajpa.repository.MemberRep..