@Deprecated public interface Template
QueryPart
objects from input.
This interface is used for templating in jOOQ. Any type of
QueryPart
can be created through templating mechanisms.
Depending on the template, some input
data is needed - for
example an array or a collection of bind values.
Simple examples of templates are plain SQL construction templates, which are used by jOOQ internally for all plain SQL factory methods. More sophisticated examples include XSL transformation templates, MyBatis templates, etc.
An example using Apache Velocity is given here:
class VelocityTemplate implements Template {
private final String file;
public VelocityTemplate(String file) {
this.file = file;
}
public QueryPart transform(Object... input) {
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "file");
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, new File("authors-and-books.vm").getAbsolutePath());
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, "true");
ve.init();
VelocityContext context = new VelocityContext();
context.put("p", input);
StringWriter writer = new StringWriter();
ve.getTemplate(file, "UTF-8").merge(context, writer);
return DSL.queryPart(writer.toString(), input);
}
}
And then:
DSL.using(configuration)
.resultQuery(new VelocityTemplate("authors-and-books.vm"), 1, 2, 3)
.fetch();
With the contents of authors-and-books.vm being
SELECT
a.first_name,
a.last_name,
count(*)
FROM
t_author a
LEFT OUTER JOIN
t_book b ON a.id = b.author_id
WHERE
1 = 0
#foreach ($param in $p)
OR a.id = ?
#end
GROUP BY
a.first_name,
a.last_name
ORDER BY
a.id ASC
Copyright © 2014. All Rights Reserved.