Date 타임을 표기할때 각 프로젝트 마다 원하는 표기 방법이 다르다. JPA에서는 @Temporal annotation을 줌으로써 구별한다. @Temporal(TemporalType.DATE) Date regDate; @Temporal(TemporalType.TIME) Date regTime; @Temporal(TemporalType.TIMESTAMP) Date regTimestamp; TemporalType.Date : 년-월-일 의 date 타입 TemporalType.Time : 시:분:초 의 time 타입 TemporalType.TIMESTAMP : date + time 의 timestamp(datetime) 타입 annotation을 사용하지 않으면 timestamp가 기본값이 된다.

QueryDsl은 Entity를 가지고 QueryDsl 전용 Q클래스를 미리 생성한다. 기본적인 사용방법은 다음과 같음. 1. Repository에서 Support 클래스를 생성해준다. ex) DownTimeScheduleRepositorySupport.java @Repository public class DownTimeScheduleRepositorySupport extends QuerydslRepositorySupport{ private final JPAQueryFactory jpaQueryFactory; public DownTimeScheduleRepositorySupport(final JPAQueryFactory jpaQueryFactory) { super(DowntimeSchedule.class..
프로젝트중 동적쿼리와 복잡한 쿼리를 사용하게 되는 경우, 네이티브 쿼리를 사용했다. 네이티브 쿼리까진 좋은데 동적쿼리를 네이티브 쿼리로 짤때마다 쿼리 검사시간때문에 부팅시간이 느려지는 현상이 발생했다. 이를 방지할 방법이 뭐가 있을까 하다 QueryDsl을 사용하기로 했다. Pom.xml Maven 디펜던시 설정 com.querydsl querydsl-jpa 4.1.4 provided com.querydsl querydsl-core 4.1.4 com.querydsl querydsl-apt 4.1.4 javax.annotation javax.annotation-api 1.3.2 com.querydsl querydsl-sql 4.1.4 Plugin 설정 (outputDirectory 경로 설정에 따라 QCl..
DB에는 여러가지 Date type들이 존재함. date(yyyy-mm-dd), time(hh:mm:ss), timestamp(date+time), datetime이 존재함. JPA 사용시 날짜에 일반적으로 Date형(java.util.Date) 변수를 사용하는데 @Temporal 애노테이션으로 이를 지정해줄 수 있음. (애노테이션을 사용하지 않는 경우 기본값은 Timestamp) Ex) @Temporal(TemporalType.DATE), @Temporal(TemporalType.TIME), @Temporal(TemporalType.TIMESTAMP) TemporalType.Date : 년-월-일 의 date 타입 TemporalType.Time : 시:분:초 의 time 타입 TemporalType...

01) NoticeController @GetMapping(value = "/list.do") public String paging() { return "noticeList"; } 일단 resources/templates/noticeList.html을 불러옴 02) Notice.html 공지사항 글 번호 글쓴이 글 제목 First Last th 속성은 Thymeleaf에서 제공하는 기능으로 JSP로 치면 와 같음. 아래 코드를 통해 table에 일일이 tr+td태그를 넣지 않아도 화면에 띄울 수 있음. 03) NoticeController 수정 Pageable은 Spring에서 페이징 기능을 위한 파라미터들을 추상화 시킨 인터페이스임. 이 Pageable을 아래와 같이 Contr..

01) PageRequest of of() 설명 PageRequest.of(int page, int size) 페이지 번호(0부터 시작), 페이지당 데이터의 수 PageRequest.of (int page, int size, Sort.Direction direction, String ...props) 페이지 번호, 페이지당 데이터의 수, 정렬 방향, 속성(칼럼)들 PageRequest.of(int page, int size, Sort sort) 페이지 번호, 페이지당 데이터의 수, 정렬 방향 02) JPA Repository, Notice(Entity) package com.kjc.workplus.notice.repository; import java.util.List; import org.springf..
Repository에서 update 관련 쿼리를 변경하고 Junit에서 테스트시 실행이 불가하거나 자동적으로 스프링 부트가 테스트임을 알고 Rollback 하는 바람에 테스트가 정상적으로 이뤄졌는지 DB 확인이 불가능한 경우가 생김. Junit 테스트시 메소드에 트랜젝션임을 명시하는 @Transactional 애노테이션을 적용시켜야 실행이 가능함. @Transactional @Test public void viewCntUpdate() { System.out.println(noticeRepository.updateViewCnt(1L)); } 이렇게 하면 정상적으로 쿼리를 짜거나 변경했다면 실행이 됨. 하지만 DB 확인시 적용되지 않음을 확인할 수 있음. 위에 말한데로 테스트임을 스프링 부트에서 인지하고 R..
01) 서론 - Spring Data JPA 사용 시 Repository에서 리턴 타입을 Optional로 바로 받을 수 있도록 지원하고 있음. - Optional을 사용하면 반복적인 null 체크를 줄일 수 있기 때문에 잘 사용하면 매우 편리함. 02) get() 사용 관련 // AS-IS @Override public Sample getSample(final Long id) { // 값이 없으면 NoSuchElementException return sampleRepository.findById(id).get(); } - .get()의 경우 결과값이 null일 경우 NoSuchElementException 발생 - orElseThrow()를 통해 값이 없을 경우 예외를 던져주거나 orElse, orEl..

01) build.gradle 02) application.properties spring.datasource - datasourcce는 MySQL 설정과 관련됨 spring.jpa.data.database_platform - JPA 데이터베이스 플랫폼을 지정함. - 여기서는 MySQL InnoDB를 사용하도록 설정. spring.jpa.open-in-view - OSIV(Open Session In View)는 웹 요청이 완료될 때까지 동일한 EntityManager를 갖도록 해줌. - 스프링부트에서 OSIV가 기본값으로 true인데 성능과 확장성 면에서 안좋다고해 false로 설정을 끔. spring.jpa.show-sql - 콘솔에 JPA 실행 쿼리를 출력. spring.jpa.hibernate.f..