2012-12-27 2 views
9

매개 변수 집합을 기반으로 동적으로 JOOQ SELECT 쿼리를 만들어야합니다. 동적으로 추가하는 방법을 모릅니다. 도와주세요동적으로 JOOQ 쿼리 만들기

미리 감사드립니다.

+2

좀 더 노골적 수 있습니까? 예 : 구성하려는 예제 쿼리를 제공 할 수 있습니까? 너는 무엇을 시도 했는가, 어디에서 실패 했는가? –

+0

실제로 선택 쿼리를 만들어야합니다. 어디 전달 된 매개 변수를 기반으로 where 절을 업데이트해야합니다. UI에서와 마찬가지로 일부 필터를 전달 중이고 WHERE 조건을 동적으로 추가하려고합니다. – user1900723

답변

25

jOOQ에는 쿼리를 작성하는 두 가지 유형의 API가 있습니다.

당신이 여기 설명서에 기재되어 수행 할 작업의 예에 getQuery() 방법을 통해 "모델"API에 액세스 할 수 있습니다

DSLContext create = DSL.using(configuration); 
SelectQuery query = create.selectQuery(); 
query.addFrom(AUTHOR); 

// Join books only under certain circumstances 
if (join) 
    query.addJoin(BOOK, BOOK.AUTHOR_ID.equal(AUTHOR.ID)); 

Result<?> result = query.fetch(); 

을 또는 비치 환 추가 조건/조건 : 예를 들어

는 선택적으로 가입을 추가

,
query.addConditions(BOOK.TITLE.like("%Java%")); 
query.addConditions(BOOK.LANGUAGE_CD.eq("en")); 

UPDATE : 귀하의 의견을 감안할 때, 즉 당신이 찾고있는 무엇 : 추가 정보를 위해

// Initialise your dynamic arguments 
Field<String> field = BOOK.TITLE; 
Comparator comparator = Comparator.LIKE; 
String value = "%" + titleSearchString + "%"; 

// Pass them to the field.compare() method 
query.addConditions(field.compare(comparator, value)); 

:

// Retrieve search strings from your user input (just an example) 
String titleSearchString = userInput.get("TITLE"); 
String languageSearchString = userInput.get("LANGUAGE"); 
boolean lookingForTitles = titleSearchString != null; 
boolean lookingForLanguages = languageSearchString != null; 

// Add only those conditions that the user actually provided: 
if (lookingForTitles) 
    query.addConditions(BOOK.TITLE.like("%" + titleSearchString + "%")); 
else if (lookingForLanguages) 
    query.addConditions(BOOK.LANGUAGE_CD.eq(languageSearchString)); 

주, 당신은 또한 Field.compare(Comparator, Object) 방법을 사용할 수 있습니다 고려하십시오 org.jooq.SelectQuery Javadoc

+0

하지만 질문이 하나 더 있습니다. 쿼리에서 java 변수를 사용할 수 있습니까 (특히 addConditions 부분). 그래서 런타임에 해당 변수의 값을 넣을 수 있습니다. 예를 들면. 열 이름. – user1900723

+0

@ user1900723 : Java에서 변수에 이러한 요소를 할당하지 못하게하는 요인은 무엇입니까? –

+0

시나리오를 설명해 드리겠습니다. 실제로 저는 테이블에서 검색해야하는 컬럼이 있습니다. 예 : 이름, ID, 날짜. 그리고 나는 그 (것)들에 따라 자료를 가져올 필요가있다, 동등 물과 같은 가치를 포함하는 1 개의 다른 매개 변수가있는 것 시작하고 (와 같은 사용하기 위하여 필요로한다), 끝과 함께 (같이 사용하기 위하여 필요로한다). 이 모든 것을 동적으로 처리해야합니다. 변수를 사용하여 값을 넣을 필요가 있습니다. 추가 설명이 필요한 경우 알려 주시기 바랍니다. 나는 여기 붙어있다. – user1900723