728x90
Querydsl 설정
아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다.
- JPA 설정에 이어서 편리한 기능을 제공하는 Querydsl 설정을 추가한다.
- 우선, build.gradle 에 라이브러리를 추가 후, gradle을 새로고침을 한다.
//Querydsl 버전 관련
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
...
//Querydsl 관련 추가
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
...
}
dependencies {
...
//Querydsl 관련 실제 lib 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
...
}
//querydsl QClass 저장 위치 관련 추가
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
- 다음은 config 패키지 아래 QueryDslConfig.java 파일을 추가한다.
@Configuration
@RequiredArgsConstructor
public class QueryDslConfig {
@PersistenceContext(unitName="[엔티티 매니저 팩토리의 빈이름 예) exampleEntityManagerFactory]")
private final EntityManager em;
@Bean(name="appQueryDslFactory")
public JPAQueryFactory queryFactory() {
return new JPAQueryFactory(em);
}
}
추가할 위치 :
- 마지막으로 페이징 처리를 편리하게 쓰기 위해 AbstractQueryDslRepositorySupport.java 파일을 추가한다.
public abstract class AbstractQueryDslRepositorySupport extends QuerydslRepositorySupport{
public AbstractQueryDslRepositorySupport(Class<?> domainClass) {
super(domainClass);
}
}
- Querydsl 테스트
- 우선, Client.java entity를 생성한다.
@Data
@Entity
@Table(name = "client")
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "supplier_id")
private int supplierId;
@Column(name = "use_yn")
private String useYn;
@Column(name = "register")
private String register;
@Column(name = "modifier")
private String modifier;
@Column(name = "register_date")
private LocalDateTime registerDate;
@Column(name = "modifier_date")
private LocalDateTime modifierDate;
@Column(name = "name")
private String name;
@Column(name = "ceo_name")
private String ceoName;
@Column(name = "business_number")
private String businessNumber;
@Column(name = "email")
private String email;
@Column(name = "telephone_number")
private String telephoneNumber;
@Column(name = "phone_number")
private String phoneNumber;
@Column(name = "person_charge")
private String personCharge;
@Column(name = "address")
private String address;
@Column(name = "business_type")
private String businessType;
@Column(name = "business_state")
private String businessState;
@Column(name = "week_day_closing_time")
private int weekDayClosingTime;
@Column(name = "weekend_closing_time")
private int weekendClosingTime;
@Column(name = "type")
private String type;
@Column(name = "start_date")
private LocalDate startDate;
@Column(name = "remark")
private String remark;
@Column(name = "reference_client_id")
private int referenceClientId;
}
- repository 패키지 하위에 ClientDslRepository.java 와 ClientDslRepositoryImpl.java 파일을 생성한다.
- 인터페이스 ClientDslRepository.java 의 내용
@Repository
public interface ClientDslRepository {
List<Client> findByName(String name);
}
- 이를 구현한 ClientDslRepositoryImpl.java 의 내용
@Repository
public class ClientDslRepositoryImpl extends AbstractQueryDslRepositorySupport implements ClientDslRepository {
@Autowired
public ClientDslRepositoryImpl() {
super(Client.class);
}
@Autowired
@Override
public void setEntityManager(@Qualifier("teamfleshEntityManagerFactory") EntityManager entityManager) {
super.setEntityManager(entityManager);
}
@Override
public List<Client> findByName(String name) {
JPAQueryFactory query = new JPAQueryFactory(super.getEntityManager());
QClient qClient = QClient.client;
return query
.selectFrom(qClient)
.where(qClient.name.eq(name))
.orderBy(qClient.startDate.desc())
.fetch();
}
}
- 테스트 파일을 작성 후, class 우측에 초록색 화살표를 클릭하여 실행한 후, 결과를 확인한다.
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
@Transactional
class ClientDslRepositoryImplTest {
@Autowired
ClientDslRepository clientDslRepository;
@Autowired
ClientJpaRepository clientJpaRepository;
@BeforeEach
public void setUp() {
//setup before testing
clientJpaRepository.deleteAll();
}
@Test
@DisplayName("매출처 조회 QueryDsl 테스트")
void findByName() {
//given
Client client = new Client();
client.setName("배아무개");
client.setAddress("서울시");
client.setPhoneNumber("01000000000");
client.setRegister("admin");
client.setType("매니저");
client.setUseYn("Y");
client.setRegisterDate(LocalDateTime.now());
clientJpaRepository.save(client);
//when
List<Client> clientList = clientDslRepository.findByName("배아무개");
//then
assertThat(clientList.get(0).getName()).isEqualTo("배아무개");
assertThat(clientList.get(0).getAddress()).isEqualTo("서울시");
assertThat(clientList.get(0).getPhoneNumber()).isEqualTo("01000000000");
}
}
- Querydsl 설정이 완료되어 테스트가 정상적으로 통과함을 확인한다.
728x90
'Spring > 초기 setting' 카테고리의 다른 글
6) 스프링 시큐리티(spring-security) 적용 (0) | 2023.04.05 |
---|---|
5) 스프링 시큐리티(spring-security) 개요 (0) | 2023.04.05 |
3) JPA 다중 스키마 설정 (0) | 2023.03.19 |
2) MyBatis 3.0 다중 스키마 설정 (0) | 2023.03.19 |
1) 스프링 부트 프로젝트 생성 (0) | 2023.03.19 |