spring11 [Spring Boot] Spring Boot 프로젝트 리팩토링하기 - (1) 1년전 만들었던 프로젝트의 코드를 리팩토링 해보고자 한다. 해당 프로젝트는 서울 명소 소개 페이지였는데, 오랜만에 열어보니 리팩토링할 부분들이 많이 보였다. 하나씩 고쳐보도록 하자. 1. JPQL > Spring Data JPA + QueryDSl 기존 코드는 아래와 같이 되어있었다. public interface TripRepository extends JpaRepository { // @Query(value = "select a.bno b.img_name, b.path, b.uuid" + // "from Trip a" + // "right outer join trip_image b on a.bno = b.trip_bno",nativeQuery = true) // @Query(value = "selec.. 2023. 8. 7. [JPA] JPA Repository 메소드로 쿼리없이 코딩 JPA Repository에서 쿼리를 이용하는 방법은 여러가지가 있다. 1. JPQL 이용 2. nativeQuery 사용 3. Querydsl 사용 4. 메소드 명명만으로 쿼리 생성 4번의 방법을 이용한 JPA 사용법이다. 검색 메서드 1). findAll() DB에서 전체 값을 list로 불러올때 사용한다. 2). findOne() primary key로 값을 1건 조회할 때 사용한다. 3). findByXX => SQL Where절이라고 생각하자. findBy뒤에 우리가 정의한 Entity의 이름을 붙이면된다. Entity의 이름의 첫글자는 대문자로 하며, id를 조건으로 검색한다면 findById(int id) 로 검색하면 된다. 여기서 여러개의 조건을 걸고싶다면...? And조건 findById.. 2022. 8. 9. [JPA] 필드와 컬럼 매핑 어노테이션 정리 @Column -> 컬럼 매핑 - name -> 필드와 매핑할 테이블의 컬럼 이름 - insertable,updatetable -> 등록, 변경 가능 여부 - nullable(DDL) -> null 값의 허용여부를 설정 - unique(DDL) -> @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용 - columnDefinition(DDL) -> DB 컬럼 정보를 직접 줄 수 있다. - length(DDL) -> 문자 길이 제약조건, String 타입에만 사용 - precision, scale(DDL) -> BigDecimal 타입에서 사용한다.(Long도 사용 가능), precision은 소수점을 포함한 전체 자릿수를, scale은 소수의 자릿수다... 2022. 8. 1. [JPA] ddl-auto 주의 및 실무 적용 ddl-auto 종류 hibernate.ddl-auto : 1. create -> 기존테이블 삭제 후 다시 생성(DROP + CREATE) 2. create-drop -> create와 같지만 종료시점에 테이블 DROP 3. update -> 변경된 부분만 반영(운영DB 적용 x) 4. validate -> Entity와 Table이 정상 매핑되었는지만 확인 5. none -> 사용하지 않음(사실상 없는 값이지만 관례상 none이라고 한다.) 주의사항 -> 운영 장비에는 절대 create, create-drop, update 사용 X -> 개발 초기 단계는 create 또는 update -> 테스트 서버는 update 또는 validate -> 스테이징과 운영 서버는 validate 또는 none -> .. 2022. 8. 1. [spring boot] @Query 어노테이션 @Query란? JPA에서 조인이나 복잡한 조건을 처리해야 하는 경우에 사용한다. 간단한 처리만 쿼리 메소드를 이용하고, 보통은 @Query를 이용하는 경우가 많다. 메소드의 이름과 상관없이 메소드에 추가한 어노테이션을 통해 원하는 처리가 가능하다. @Query의 value는 JPQL로 작성하는데 흔히 객체지향 쿼리라고 불리우는 구문들이다. @Query 장점 필요한 데이터만 선별적으로 추출하는 기능 DB에 맞는 순수한 SQL을 사용하는 기능 select가 아닌 DML(insert, update, delete)등을 처리하는 기능(@Modifiying과 함께 사용) @Query 파라미터 바인딩 ?1. ?2' 와 1부터 시작하는 파라미터의 순서를 이용하는 방식 ':xxx' 와 같이 : 파라미터 이름을 활용하는.. 2022. 6. 14. [spring boot] JPA 페이징/정렬 처리 JPA의 페이징 처리 JPA는 개발자들이 SQL이 아닌 API의 객체와 메서드를 사용하는 형태로 페이징 처리를 할 수 있다. 페이징 처리할때 사용하는 메소드는 findAll() 이다. findAll()메소드는 ]paRepository 인터페이스의 상위인 PagingAndSortRepository의 메서드로 파라미터로 전달되는 Pageable이라는 타입의 객체에 의해서 실행되는 쿼리를 결정하게 된다. Pageable 인터페이스 Pageable 인터페이스는 페이지 처리에 필요한 정보를 전달하는 용도의 타입으로 인터페이스이기 때문에 실제 객체를 생성할 때는 구현체인 PageRequest라는 클래스를 사용한다. PageRequest 클래스의 생성자는 protected로 선언되어 new를 사용할수 없고, 객체를 .. 2022. 6. 14. 이전 1 2 다음