반응형
SELECT * FROM DUAL
WHERE GUBUN = 'A'
AND CATEGORY IN (1,2,3)
현재 프로젝트에서 JPA를 사용하고 있어서 몇몇 기능을 추가하면서 JAP를 사용해봤습니다.
기존에는 ExampleMatcher를 사용하여 단순한 where을 만들고 있었는데 IN을 추가하려고 하니 방법을 못 찾아서 Specifications를 사용하게 되었어요 혹시라도 ExampleMatcher를 사용해 구현하신 분.. 댓글로 알려주시면 감사하겠습니다.
ExampleMatcher.matching().withIgnoreNullValues().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING);
기존에는 단순히 title,name등 일치하는 거만 사용을 하여 ExampleMatcher 적용을 한거같아요.
SELECT * FROM DUAL
WHERE CATEGORY IN (1,2)
AND TITLE = 'A'
이런 결과를 을 얻으려고 Specifications를 사용하게 되었어요.
public static Specification<Document> category(String... categorys) {
return new Specification<Document>() {
@Override
public Predicate toPredicate(Root<Document> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
return root.get("categoryCd").in(categorys);
}
};
}
public static Specification<Document> fieldEquals(String searchField,String searchData) {
return new Specification<Document>() {
@Override
public Predicate toPredicate(Root<Document> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
return cb.equal(root.get(searchField), searchData);
}
};
}
public static Specification<Document> fieldLike(String searchField,String searchData) {
return new Specification<Document>() {
@Override
public Predicate toPredicate(Root<Document> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
return cb.like(root.get(searchField), "%" + searchData + "%");
}
};
}
category는 배열로 받아서 in을 사용하게 하였어요.
fieldEquals는 단순히 = 비교반 하기 위해 만들었어요 Column = Value로 실행하게 하였어요.
지금은 사용하지는 않지만 like절도 만들었어요 Column like '% value%'로 실행하게 하였어요.
사용하는 Service에서는
Specifications<Document> spec = Specifications.where(DocumentWhere.category(documentCategoryCds));
spec.and(DocumentWhere.fieldLike("title", document.getTitle()));
이런 식으로 where 첫 문장을 만들고 and로 title = value를 만들어서 findAll로 실행을 하였어요.
실행 로그로 위 SQL처럼 원하는 방식으로 실행이 되었어요. 위 Method처럼 원하는 게 있으면 구현을 하여 직접 적용을 해야 할 거 같아요. 사용하면서 아직 적응이 안되어서 Mybatis보다는 어렵네요.... Insert, Update에서는 간단히 사용이 가능한 거 같은데 복잡한 Query일 경우 @Query를 사용하여 결과를 가져오는 것도 나쁘지 않은 거 같아요
반응형
'개발 > Java' 카테고리의 다른 글
org.javers.core.Javers사용하여 Java Model 값 비교 (4) | 2020.11.27 |
---|---|
egov 3.9버전 mybatis association 사용시 에러(org.apache.ibatis.javassist.util.proxy.SecurityActions.setAccessible) (0) | 2020.11.19 |
ksoap2이용하여 SOAP API가져오기 (0) | 2020.09.14 |
Java Custom Annotation (0) | 2020.08.19 |
JAVA Spring Validation (0) | 2020.08.19 |