https://github.com/kwon37xi/freemarker-dynamic-ql-builder
Freemarker template based Dynamic Query Language Builder
https://github.com/kwon37xi/freemarker-dynamic-ql-builder
Last synced: 3 months ago
JSON representation
Freemarker template based Dynamic Query Language Builder
- Host: GitHub
- URL: https://github.com/kwon37xi/freemarker-dynamic-ql-builder
- Owner: kwon37xi
- License: apache-2.0
- Created: 2015-11-18T14:59:32.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-11-28T17:17:19.000Z (over 9 years ago)
- Last Synced: 2023-07-31T12:10:46.548Z (almost 2 years ago)
- Language: Java
- Size: 97.7 KB
- Stars: 6
- Watchers: 4
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Freemarker Dynamic QL(SQL/JPQL/HQL/...) Builder
[](https://maven-badges.herokuapp.com/maven-central/kr.pe.kwonnam.freemarkerdynamicqlbuilder/freemarker-dynamic-ql-builder)Do you need to build native SQL dynamically in Java application? But are you worried about how to bind query parameters? Look at the following example.
When you have this file `users/select.ql.ftl`
```sql
SELECT *
FROM somewhere
<@ql.where>
<#if user.name?has_content>
name = ${param(user.name)}
#if>
<#if user.birthyear gt 0>
AND birthyear = ${param(user.birthyear)}
#if>
<#if user.employeeType??>
AND employeeType = ${param(user.employeeType, 'enumToName')}
#if>
<#list userIds!>
AND userId IN (<#items as userId>${param(userId)}<#sep>,#sep>#items>)
#list>
@ql.where>ORDER BY userId
LIMIT 10
```Run this template with the following java code
```java
FreemarkerDynamicQlBuilder dynamicQlBuilder = ....;User user = new User();
user.setName(""); // empty on purpose
user.setBirthyear(2015);
user.setEmployeeType(EmployeeType.FULLTIME);Map dataModel = new HashMap();
dataModel.put("user", user);
dataModel.put("userIds", new int[]{100, 200, 300});DynamicQuery dynamicQuery = dynamicQlBuilder.buildQuery("users/select", dataModel);
```Then you will get `DynamicQuery` object with the following properties
```
dynamicQuery.getQueryString()
==> String
"SELECT *
FROM somewhere
WHERE birthyear = ?
AND employeeType = ?
AND userId IN (?,?,?)
ORDER BY userId
LIMIT 10"dynamicQuery.getParameters()
==> List : [2015, FULLTIME, 100, 200, 300]dynamicQuery.getQueryParameterArray()
==> Object[] : [2015, FULLTIME, 100, 200, 300]
```## Getting Started
* [Freemarker Dynamic QL Builder 시작하기 - 한국어](https://github.com/kwon37xi/freemarker-dynamic-ql-builder/wiki/GettingStarted_KO)
* [Getting Started Freemarker Dynamic QL Builder - English](https://github.com/kwon37xi/freemarker-dynamic-ql-builder/wiki/GettingStarted_EN)## Requirements
* Java 6 or later
* This library depends on only [freemarker](http://freemarker.org) 2.3.23+ and [slf4j](http://www.slf4j.org/).