Spring Data JPA 에서 in 조건 부 매개 변수 전달 방식

Spring Data JPA 에서 sql 조건 을 사용자 정의 하 는 in 매개 변수 기록
이 글 은 나중에 볼 수 있 도록 기록 하고 같은 문 제 를 만 나 고 있 는 친구 들 이 깨 우 침 을 줄 수 있 기 를 바 랍 니 다.만약 에 더 좋 은 방법 이 있 거나 제 방법 에 문제 가 있 으 면 알려 주 십시오.감사합니다.
다음은 두 가지 간단 한 방법 을 쓰 고 다음 부분 에 주의 하 세 요.
여기 서 저 는 HQL 에서 in 뒤의 매개 변수 문제 만 기록 하고 세부 적 인 조회 방법 과 관련 된 코드 는 생략 합 니 다.양해 해 주 십시오.
검색 인터페이스:

/**
** paramString :     hql
** paramMap : hql        
** start:      
** max:      
**/
public abstract List query(String paramString, Map paramMap, int start, int max);
방법 1:조합 조건
뒤에 괄호 안에 몇 개의 인자 가 있 든 동적 연결 을 사용 하면 HQL 을 연결 하 는 과정 에서 코드 를 붙 이지 않 습 니 다.결 과 는 다음 과 같 습 니 다.
HQL

String hql = “select obj from Goods obj where obj.id in(:id_1,:id_2,id_3……)” ;
조회 조작

Map<String, Long> paramMap = new HashedMap();
paramMap.put(“id_1”,Long.valueOf(4));
paramMap.put(“id_2”, Long.valueOf(5));
~~~~~~~~~          ~~~~~~~~~~~~~~~~~~
List<Goods> goods = goodsService.query(hql , paramMap, 1, 100);
이러한 동적 연결 방식 으로 연결 하면 데 이 터 를 조회 할 수 있 습 니 다.그러나 주의해 야 할 점 이 있 습 니 다.Object 가 초 류 로 서 큰 범 형 이 될 수 있다 는 것 을 잘 알 고 있 습 니 다.그러나 여기 서 paramMap 의 범 형 으로 된 후에 매개 변수 값 을 추가 할 때 실제 대상 에서 id 속성 유형 이 어떤 유형 이 라면 반드시 eg 로 전환 해 야 합 니 다.

paramMap.put(“id_1”,Long.valueOf(4)); ――――――(    id   Long   )
방법 2:집합 사용
HQL

String hql = “select obj from Goods obj where obj.id in(:id)”;
의 조회 동작:

Map<String, Object> paramMap = new HashedMap();
ArrayList<Object> list = new ArrayList<>();
list.add(Long.valueOf(4));
list.add(Long.valueOf(5));
paramMap.put(“id”, list);
List<Goods> goods = goodsService.query(“select obj from Goods obj where obj.gc.id in(:id)”, paramMap, -1, -1);
그리고 예전 의 방법 은 이렇게 쓰 는 것 도 문제 가 없 는 것 같 습 니 다.Object 는 초 류 이기 때문에 하나의 Long 은 일치 할 수 있 습 니 다.컴 파일 은 이상 하지 않 지만 달 린 후에 이 곳 에 방문 하면 문제 가 발생 할 것 입 니 다.구체 적 인 이상 은 보조금 입 니 다.직접 해 보 세 요.

Map<String, Object> paramMap = new HashedMap();
ArrayList<Object> list = new ArrayList<>();
list.add(4);
list.add(5);
paramMap.put(“id”, list);
List<Goods> goods = goodsService.query(“select obj from Goods obj where obj.gc.id in(:id)”, paramMap, -1, -1);
다시 한 번 주의:
hql 에서 조건 필드 는 어떤 유형 입 니까?매개 변 수 를 전달 할 때 반드시 주의해 야 합 니 다.만약 에 범 형 이 큰 유형 이 라면 실제 값 을 추가 할 때 반드시 해당 하 는 유형 으로 전환 해 야 합 니 다.
여기까지 입 니 다.이상 은 두 가지 HQL 사고 입 니 다.하지만 저 는 안 드 로 이 드 를 하 는 사람 이기 때문에 회사 에서 자바 백 스테이지 개발 도 없고 저 를 잠시 괴 롭 혔 습 니 다.
그러나 인터넷 에서 해결 방안 을 찾 았 는데 이 매개 변 수 는 Collection<>이 라 고 써 야 한다 고 했 습 니 다.사실은 작은 데이터 형식 도 가능 합 니 다.이 Collection 은 자바 의 큰 인터페이스 로 서 볼 때 가 비교적 적 습 니 다.
검색 예 에서 Spring Data JPA

    /**
     *       
     *
     * @param customer
     * @return
     */
    @SuppressWarnings("unchecked")
    @RequestMapping(method = RequestMethod.POST, value = "/findAll")
    public @ResponseBody
    Iterable<Customer> findAll(@RequestBody Customer customer) {       
        Pageable pageable = new PageRequest(customer.getPageNumber(), customer.getSize(), Sort.Direction.DESC,
                "creationTime");
        Specification<Customer> specification = new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
                List<Predicate> list = new ArrayList<Predicate>();                
                //     
                String userId = customer.getUserId();
                if (!StringUtils.isEmpty(userId)) {
                    if (userId.contains(",")) { // in  
                        String[] ids = userId.split(",");
                        CriteriaBuilder.In<Object> in = cb.in(root.get("userId"));
                        for (int i = 0; i < ids.length; i++) {
                            in.value(ids[i]);
                        }
                        list.add(in);
                    } else { //     
                        list.add(cb.equal(root.get("userId").as(String.class), userId));
                    }
                }
                return cb.and(list.toArray(new Predicate[list.size()]));
            }
        };
        return this.customerRepository.findAll(specification, pageable);
    }
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기