본문 바로가기
반응형

JPA24

JPA 더티체킹(Dirty Checking) 이란? JPA에 대해서는 아래 참고 포스팅을 참고하면 확인해 볼 수 있다. 이번 포스팅에서 다뤄볼 내용은 더티체킹이라는 개념이며 직역으로는 변경상태 감지라고 느낄 수 있다. JPA에서는 값을 데이터베이스와 영속시키기 위한 몇가지 방법이 있는데 지금까지 다뤄왔던 방법은 merge 방법이다. findbyid 로 값을 가져온 뒤 영속을 시켜둔 상태에서 필요시마다 save 메서드를 날리면서 id 값 기준으로 동일한 값이 있는지 체킹하고 있다면 update 없다면 insert를 날려주는 방식이다. 하지만 그렇게 되면 매번 쿼리를 날릴때마다 select insert / select update를 날리게 된다. 불필요한 데이터베이스 체킹이 한번씩 더 날아간다. 이럴 경우를 방지하려면 더티체킹이 돼야 한다. 간단하게 말하면 .. 2022. 12. 3.
JPA 로그 설정 관련 application.yml spring: jpa: properties: hibernate: show_sql: true // 로그 보이기 format_sql: true // 들여쓰기 등 포맷에 맞춰서 보이기 use_sql_comments: true // 주석 표시하기 logging: level: org: hibernate: type: descriptor: sql: trace // 파라미터값 표출 (사용 안하면 기본 파라미터 값이 뭔지 모르고 바인딩 쿼리로만 보임) application.properties spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properti.. 2022. 11. 24.
JpaRepository 관련 쿼리메서드 JPA 를 사용하게 되면 repository 에서 JpaRepository 를 상속 받아서 해당 repository의 메서드를 사용할수 있다. 대표적으로 findById 가 있는데 비슷한 메서드 들을 좀더 알아보기 위해 포스팅을 작성해본다. 설명 Query JPA 컬럼 1개 조회 select * from Table where id = 1; findById 컬럼 여러개 조회 select * from Table where id = 1 and name = "name"; findByIdAndName 중복제거 조회 select distinct * from Table; findDistinctBy 상위 10개 조회 select * from Table where rownum = ?1 After findByStartDa.. 2022. 11. 16.
JPA에서의 어노테이션 JPA에서나 Springdata JDBC에 사용되는 어노테이션에 관해서 다뤄볼 것이다. 엔티티 관련 @Entity 당 어노테이션을 붙이게 되면 해당 클레스가 데이터베이스의 테이블과 1대1 매칭이 됨. @Table(name="zzz") 해당하는 테이블과 매핑됨. @Column(aa 해당 맴버변수와 테이블의 Column와 맵핑됨 @Id 해당 어노테이션이 붙은 맴버변수는 해당 테이블의 Primary key가 된다. 객체를 식별할 유일값임. @GeneratedValue(stargety=?) AUTO(default):JPA 구현체가 자동으로 생성 전략을 결정한다. IDENTITY : 기본키 생성을 데이터베이스에 위임한다. 예를 들어 MySQL의 경우 AUTOINCREMENT를 사용하여 기본키를 생성한다. SEQU.. 2022. 7. 22.
JPA (getById / findById) 차이 JPA를 오랫동안 접하질 않아서 계속해서 새로운것을 알게되고 배워가는 재미에 요즘 빠져있다. 오늘 다뤄볼 내용은 JPA에서 repository를 통해서 id기준으로(pk일 경우) 데이터를 가져오는것에 대해서 다뤄볼것이다. 결론만 먼저 말하면 findbyid는 직접적으로 데이터베이스를 다녀오고 getbyid는 데이터베이스를 갔다오지 않는다. 둘의 차이는 데이터베이스에 접근을 직접 하느냐 안하느냐의 차이이다. 그렇기에 getbyid가 성능상 좀더 유리할수 있다. 그렇지만 언제 findbyid를 사용하느냐면 특정 id 값만 사용할 일이 있다면 getbyid가 유리하다. 이 말의 반대 의미는 다른 컬럼들을 사용을 못하기에 findbyid를 사용해서 다른 컬럼들의 값을 가져와야한다. 실제로 코드를 짜게 되면 @G.. 2022. 3. 18.
JPA N+1 이란? ORM과 JPA에 대한 개념은 아래 참고 포스팅에 추가가 되어있으니 확인 바란다. 이 개념은 JPA를 사용하면서 콘솔 창에 보면 나오는 쿼리를 통해서 확인할수 있다. 예를들어 책과 도서관이라는 각각의 Entity 가 있다. 책에는 id과 name 과 library라는 변수들이 있고 library에는 @ManyToOne 이 걸려있다. 이럴경우 책 정보를 뽑을때 bookRepository.findBy1Id(id) 를 하면 결과를 가져올때 참조되는 library정보를 가져오게 된다. 먼저 sql에서 데이터를 가져오는걸 fetch라고 하는데 fetch에는 2가지 타입이 있다. 데이터가져오는것을 포함해서 데이터베이스의 실행단계가 궁금하면 아래 포스팅을 참고하도록 한다. eager 와 lazy이다. eager는 참.. 2022. 2. 11.
SpringBoot/JPA part.10 이번 포스팅은 CRUD 에서 마지막 delete에 관한 포스팅이다. 방법은 앞에서 Read를 할때와 비슷하다. id를 받아와서 그 id에 대한 값을 삭제할것이다. 시작은 controller 이고 delete 메서드를 사용할것이다. 다음과 같이 delete 관련 메서드를 작성한다. controller 메서드 추가 @DeleteMapping("delete") public void deleteBook(@RequestParam Long bookId) { Optional bookValue = bookRepository.findById(bookId); bookValue.ifPresent(selectUser->{ bookRepository.delete(selectUser); }); } param으로 id를 받아오고 .. 2022. 2. 8.
SpringBoot/JPA part.9 이번 포스팅은 CRUD 중에서 U update 순서다. 똑같이 controller에서 시작을 할것이다. update는 put메서드를 사용하게 된다. 방법은 id를 가지고 book 객체를 가져온 후에 바꿀 값을 함께 보내주며 그 값으로 대체를 하고 다시 저장해주는 방식으로 진행할 것이다. 먼저 controller에 put메서드를 추가한다. controller에 메서드 추가 @PutMapping("update") public String updateBook(@RequestParam Long bookId,@RequestBody Book book) { Optional bookValue = bookRepository.findById(bookId); bookValue.ifPresent(selectUser->{ se.. 2022. 2. 7.
SpringBoot/JPA part.8 이번 포스팅에서는 CRUD중에 Read에 대해서 실습을 해볼것이다. 한가지의 id값을 get 메서드를 보낼 것이고 그 id의 레코드를 가져와서 콘솔에 출력하는 것 까지 진행을 해보도록 하겠다. 시작은 controller에서 부터 시작이 되므로 create처럼 똑같이 controller에서 시작을 할것이다. controller에 아래와 같이 메서드를 추가 하였다. controller 추가 @GetMapping("read") public String findBook(@RequestParam Long bookId) { Optional book = bookRepository.findById(bookId); System.out.println(book); return null; } 메서드는 Get메서드를 사용하였고.. 2022. 2. 6.
반응형