답변
jOOQ에는 쿼리를 작성하는 두 가지 유형의 API가 있습니다.
자바 코드에 인라인 SQL 문을 생성 할 수있는 DSL API.
create.select(T.A, T.B).from(T).where(T.X.eq(3).and(T.Y.eq(5)));
증분 SQL 작성을 허용하는 "모델"API.
https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non-dsl/
: 언제든지, 당신은 DSL 쿼리 개체
당신이 여기 설명서에 기재되어 수행 할 작업의 예에 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
하지만 질문이 하나 더 있습니다. 쿼리에서 java 변수를 사용할 수 있습니까 (특히 addConditions 부분). 그래서 런타임에 해당 변수의 값을 넣을 수 있습니다. 예를 들면. 열 이름. – user1900723
@ user1900723 : Java에서 변수에 이러한 요소를 할당하지 못하게하는 요인은 무엇입니까? –
시나리오를 설명해 드리겠습니다. 실제로 저는 테이블에서 검색해야하는 컬럼이 있습니다. 예 : 이름, ID, 날짜. 그리고 나는 그 (것)들에 따라 자료를 가져올 필요가있다, 동등 물과 같은 가치를 포함하는 1 개의 다른 매개 변수가있는 것 시작하고 (와 같은 사용하기 위하여 필요로한다), 끝과 함께 (같이 사용하기 위하여 필요로한다). 이 모든 것을 동적으로 처리해야합니다. 변수를 사용하여 값을 넣을 필요가 있습니다. 추가 설명이 필요한 경우 알려 주시기 바랍니다. 나는 여기 붙어있다. – user1900723
좀 더 노골적 수 있습니까? 예 : 구성하려는 예제 쿼리를 제공 할 수 있습니까? 너는 무엇을 시도 했는가, 어디에서 실패 했는가? –
실제로 선택 쿼리를 만들어야합니다. 어디 전달 된 매개 변수를 기반으로 where 절을 업데이트해야합니다. UI에서와 마찬가지로 일부 필터를 전달 중이고 WHERE 조건을 동적으로 추가하려고합니다. – user1900723