NativeQuery#
com.zitlab.palmyra.store.NativeQuery
Overview#
Value object that carries a hand-written SQL statement plus its positional parameters, optional count query, and paging controls. Implements QueryOptions and CountQuery. Built and returned from NativeQueryHandler.getQuery(...).
params are positional ? placeholders (JDBC-style) — bind them in order. Set countQuery when pagination needs a distinct count different from a naive COUNT(*) over the main query.
Methods#
| Method | Signature |
|---|---|
NativeQuery |
NativeQuery() · NativeQuery(String query) · NativeQuery(String query, List<Object> params) · NativeQuery(String query, Object... params) |
getQuery / setQuery |
String getQuery() · void setQuery(String query) |
getParams / setParams |
List<Object> getParams() · void setParams(List<Object> params) |
addParams |
void addParams(Object param) · void addParams(Object... params) |
clearParam |
void clearParam() |
hasParams |
boolean hasParams() |
getCountQuery / setCountQuery |
String getCountQuery() · void setCountQuery(String countQuery) |
getFetchSize / setFetchSize |
int getFetchSize() · void setFetchSize(int fetchSize) — default 100 |
getLimit / setLimit |
int getLimit() · void setLimit(int limit) |
getOffset / setOffset |
int getOffset() · void setOffset(int offset) |
limitFirst |
void limitFirst() |
Example#
@Override
public NativeQuery getQuery(FilterCriteria criteria, HandlerContext ctx) {
String sql = """
SELECT u.id, u.name, SUM(o.amount) total
FROM users u JOIN orders o ON o.user_id = u.id
WHERE o.created_at >= ?
GROUP BY u.id, u.name
""";
NativeQuery q = new NativeQuery(sql, criteria.getSimpleCriteria().get("since"));
q.setCountQuery("""
SELECT COUNT(DISTINCT u.id)
FROM users u JOIN orders o ON o.user_id = u.id
WHERE o.created_at >= ?
""");
q.setFetchSize(500);
return q;
}