JPA
  • Order BY ID DESC List findTopByNameOrderByIdDesc(String name); Order BY ID DESC (Limit 3) List findTop3ByNameOrderByIdDesc(String name); // 역순 TopN 중 N을 생략하면 1이 default 값이다 List findTopByNameOrderByIdDesc(String name); Order BY ID ASC (Limit 1) List findTop1ByNameOrderByIdAsc(String name); // 정순 여러 컬럼의 정렬 (Id Desc, Email Asc) List findFirstByNameOrderByIdDescEmailAsc(String name); // id desc, em..

    Read more
  • like 'TEXT%' List findByNameStartingWith(String name); like '%TEXT' List findByNameEndingWith(String name); like '%TEXT%' List findByNameLike(String name); 호출 코드 (파라미터에 직접 '%test%'를 넣어줘야한다.) userRepository.findByNameLike("%test%") Contains List findByNameContains(String name); 호출 코드 (파라미터에 직접 '%test%'를 넣어줄 필요가 없다.) userRepository.findByNameLike("test")

    Read more
  • NotNull List findByIdIsNotNull(); // id is not null NotEmpty List findByAddressIsNotEmpty(); 주의해야할점 String 타입의 변수의 경우 (findByNameIsNotNull()) NAME IS NOT NULL AND NAME != '' 라고 생각할 수 있겠지만, 이게 아니다. User.java 에 아래 코드를 추가한다. private List address; Collection Type 의 not empty 를 체크한다. (address not empty)

    Read more
  • Between (LocalDate Type, Long Type 모두 가능) LocalDateTime 타입 변수 List findByCreatedAtBetween(LocalDateTime startDateTime, LocalDateTime endDateTime); long 타입 변수 List findByIdBetween(long startId, long endId); Between~And List findByIdGreaterThanEqualAndIdLessThanEqual(Long id1, Long id2); 실행쿼리 findByIdBetween 메서드와 동일하게 구현된다. between (id>=? AND id

    Read more
  • Date After List findByCreatedAtAfter(LocalDateTime yesterday); Date GreaterThan List findByCreatedAtGreaterThan(LocalDateTime yesterday); 실행쿼리 created_at > ? Date GreaterThanEqual List findByCreatedAtGreaterThanEqual(LocalDateTime yesterday); 실행쿼리 created_at >= ? Date Before List findByCreatedAtBefore(LocalDateTime yesterday);

    Read more
  • WHERE~AND절 /* WHERE AND */ List findByEmailAndName(String email, String name); WHERE~OR절 /* WHERE OR */ List findByEmailOrName(String email, String name);

    Read more
  • 전체 리스트 조회 List userList = userRepository.findAll(); 전체 리스트 조회 + regDts 컬럼 역순 정렬 List userList = userRepository.findAll(Sort.by(Sort.Direction.DESC, "regDts")); 데이터 단건 조회 (1) Long Type Id : 1 Optional userOptional = userRepository.findById(1L); Optional 리턴 https://devfunny.tistory.com/330 자바 8의 Optional 등장 NullPointerException NullPointerException은 개발자가 한번이라도 만나봤을 에러이다. 그정도로 흔하게 일어나는 에러로, 이는 “자바의..

    Read more
  • 영속성 컨텍스트 JPA에서 영속성 컨텍스트란, 엔터티를 영구 저장하는 환경을 말한다. 영속성 컨텍스트는 우리가 개발하면서 직접 관리할 수 없다. 영속석 컨텍스트는 논리적인 개념이고 눈에 보이지 않는다. 엔터티 매니저를 통해서 영속성 컨텍스트에 접근이 가능하다. EntityManager.persist(entity); 영속성 컨텍스트 엔티티의 생명주기 1) 비영속 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 2) 영속 영속성 컨텍스트에 관리되는 상태 3) 준영속 영속성 컨텍스트에 저장되었다가 분리된 상태 4) 삭제 영속성 컨텍스트에서 삭제된 상태 생명주기 관리 비영속 상태 Member member = new Member(); Member.setId(“aa”); 영속 상태 Member member = ne..

    Read more
  • SQL 중심의 개발 SQL 중심의 개발에서는 개발자가 직접 SQL 매핑을 한다. 각 테이블의 관계성을 생각하여 쿼리를 짜고, 비즈니스 로직을 수행하기 위해 단계별로 쿼리를 실행시킨다. 부모 테이블 -> 자식 테이블 까지의 데이터 등록이 필요하다면 INSERT 쿼리를 여러개 수행하게 되고, 각 테이블의 연관관계 (PK, FK) 의 조인도 개발자가 직접 설계한다. 객체지향적으로 설계할수록, SQL 작업은 더 복잡해지고 힘들어진다. 매핑 작업이 늘어나게되고, 개발자가 직접 해야하는 일들이 늘어나기 때문에 그에 따른 책임감이 더욱 발생하게된다. JPA 만약, 객체를 자바 컬렉션(Map, List) 에 저장하듯이, DB에 저장할 수는 없을까? 이러한 생각을 바탕으로 나온 것이 바로 JPA이다. ORM JPA를 알..

    Read more
  • JPA 처음 적용해보기 Spring, SpringBoot 프레임워크가 아닌 기본 Java 프로젝트의 main 함수로 JPA를 구현해보자. resources/META-INF/persistence.xml Member Entity package hellojpa; import javax.persistence.*; @Entity @Table(name="MEMBER") public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME") private String username; public String getId() { return id; } public void setId(String id) { this.id = id; ..

    Read more
  • 기본제공 findById(PK) 메소드 public Optional getMember(Long idx) { return memberRepository.findById(idx); } JPA에서 ID값을 파라미터로 SELECT 할 수 있는 기본 findById 메소드를 제공한다. 하지만 ID 필드가 아닌 다른 여러 필드들로도 데이터를 조회할 경우가 생기게된다. 상황 로그인 API를 구현하면서 파라미터로 받아온 아이디와 패스워드에 맞는 회원 정보가 있는지 조회해야하는 상황이 생겼다. 1) AuthController.java @PostMapping("/login") public ResponseEntity login(@ModelAttribute LoginDto loginDto, @ApiParam(hidden = ..

    Read more
  • 들어가기 전 Lombok을 사용하여 구현하기 전, 라이브러리를 사용하지 않고도 구현할 줄 알아야한다. 아래 포스팅을 참고하자. devfunny.tistory.com/409 [SpringBoot + JPA] DTO, Entity의 빌더패턴 적용기 도입 스프링부트 프로젝트에서 JPA를 사용하여 API를 만드는 상황에 놓였다. 나는 API의 파라미터로 받아올 Dto 파일을 생성하였고, JPA Repository로 보낼 Entity 파일을 생성하였다. com.api.seohae - dto U devfunny.tistory.com 도입 스프링부트 프로젝트에서 JPA를 사용하여 API를 만드는 상황에 놓였다. 나는 API의 파라미터로 받아올 DTO 파일을 생성하였고, JPA Repository로 보낼 Entity ..

    Read more
  • JPA JPA : Java Persistence API 자바 진영의 ORM 기술 표준이다. JPA를 알아보기전에 ORM과 ORM 프레임워크에 대해 알아보자. ORM ORM : Object Relational Mapping 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크 ORM 프레임워크를 사용함으로써 그동안 개발해왔던 INSERT/UPDATE/SELECT 쿼리 등을 직접 작성하지 않고도 데이터를 저장할 수 있게되었고 우리는 객체를 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 쿼리 작성 시의 일들을 수행할 수 있게 되었다. ORM 프레임워크에 저장된 객체들은 ORM 프레임워크가 적절한 SQL을 생성해서 데이터베이스에 저장된다. ORM 프레임워크는 단순히 SQL을 생성해서 데이터베..

    Read more
  • 도입 스프링부트 프로젝트에서 JPA를 사용하여 API를 만드는 상황에 놓였다. 나는 API의 파라미터로 받아올 DTO 파일을 생성하였고, JPA Repository로 보낼 Entity 파일을 생성하였다. com.api.seohae - dto UsersDTO.java - entity Users.java 위 구조로 갔을때 만나게될 상황을 자세히 살펴보자. 상황분석 Users 테이블에 회원을 등록하는 간단한 POST API를 보자. @PostMapping("") public ResponseEntity addUser(@ModelAttribute UsersDto usersDto) { Users users = userService.addUser(usersDto); return ...; } 파라미터로 UsersDto..

    Read more
  • Copyright 2024. GRAVITY all rights reserved