본문 바로가기
반응형

JPA27

findBy 비교 조건들 이전 포스팅에서 조건들을 몇개 올린적이 있다. 근데 해당 조건들은 대부분 equals 조건들이었다. 자세한 내용은 아래 참고 포스팅을 참고 하자. 이번 포스팅은 equals 을 포함해서 비교 연산자까지 있는 조회 조건을 나열 하려고 한다. 저번 포스팅에서 중복된 내용도 있지만, 공식 홈페이지에 있는 내용이니 아래 내용을 참고하는것이 좀더 좋을것 같다. https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#jdbc.query-methods.at-query Spring Data JDBC - Reference Documentation Example 10. Repository definitions using domain classes with.. 2023. 1. 4.
JPA query Keyword (repository) 이전 포스팅에서 jpa 메서드 들을 간단하게 정리한 포스팅이 있다. 자세한 사항은 아래 참고 포스팅을 참고 바란다. jpa 메서드에 대해서 좀더 다뤄보려고 한다. 자료 출처는spring 공식 홈페이지 에서 docs에서 가져왔다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords Spring Data JPA - Reference Documentation Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { Li.. 2022. 12. 6.
JPA메서드 save 와 saveAndFlush 비교 이전 포스팅에서 jpa 에 대해서도 다뤄봤고 영속 방법중 하나인 더티체킹에 대해서도 다뤘다. 아래 참고 포스팅을 확인 바람. 이번 포스팅에서는 더티체킹이 아닌 merger 방법으로 데이터를 영속하는 메서드인 save메서드에 대해서 다뤄볼 것이다. 일단 @Transactional 어노테이션을 붙이지 않을 경우는 새로운 Entity를 만들고 save/saveAndFlush 로 저장을 한다음 set으로 entity 의 값을 변경해주고 db에서 값을 확인해보면 save를 쓰는 경우나나 saveAndFlush를 쓰는 경우나 둘다 set을 할 경우 update 가 되지 않는다. @Transactional 어노테이션을 붙이는 경우에 save와 saveAndFlush를 비교를 하면 똑같이 메서드 종료 후 update가.. 2022. 12. 5.
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.
반응형