Skip to content
KwonNam Son edited this page Nov 26, 2015 · 37 revisions

freemarker-dynamic-ql-builder 시작하기

freemarker-dynamic-ql-builder 를 사용하면 Java에서 동적으로 SQL, JPQL, HQL 등을 생성하고 JDBC 쿼리 파라미터를 바인딩해줄 수 있다.

의존성이 freemarker 2.3.23+와 slf4j 단 두개뿐인 가벼운 동적 쿼리 생성 툴이다.

Gradle 의존성 설정

compile 'kr.pe.kwonnam.freemarkerdynamicqlbuilder:freemarker-dynamic-ql-builder:0.2'

Maven 의존성 설정

<dependency>
    <groupId>kr.pe.kwonnam.freemarkerdynamicqlbuilder</groupId>
    <artifactId>freemarker-dynamic-ql-builder</artifactId>
    <version>0.2</version>
</dependency>

Builder 객체 설정

먼저 프리마커 Configuration 객체를 입맛대로 생성하고, 이를 사용하여 FreemarkerDynamicQlBuilder 객체를 생성한다.

최종 생성된 FreemarkerDynamicQlBuilder 객체를 SpringFramework Bean으로 등록해서 Spring과 함께 사용하면된다. FreemarkerDynamicQlBuilder는 Thread Safe 하다. 단 Configuration 객체를 한 번 설정한 이후 변경해서는 안된다.

import freemarker.template.Configuration;
import kr.pe.kwonnam.freemarkerdynamicqlbuilder.FreemarkerDynamicQlBuilder;
import kr.pe.kwonnam.freemarkerdynamicqlbuilder.FreemarkerDynamicQlBuilderFactory;

// ...

// 자신이 원하는 대로 Freemarker 설정을 해준다.
Configuration freemarkerConfiguration = new Configuration(Configuration.VERSION_2_3_23);
freemarkerConfiguration.setClassForTemplateLoading(AbstractFreemarkerDynamicQlBuilderTest.class, "/META-INF/dynamicqls");
freemarkerConfiguration.setDefaultEncoding("UTF-8");
freemarkerConfiguration.setNumberFormat("0.######"); // 숫자형을 쉼표없이 숫자만 출력하게 포미팅
freemarkerConfiguration.setTemplateUpdateDelayMilliseconds(3600000L);
freemarkerConfiguration.setCacheStorage(new MruCacheStorage(500, 5000)); // 성능 향상을 위한 캐시 설정

// Freemarker 설정을 가지고 FreemarkerDynamicQlBuilder 객체를 생성한다.
FreemarkerDynamicQlBuilder builder = new FreemarkerDynamicQlBuilderFactory(freemarkerConfiguration)
		.addParameterConverter("booleanTo10", new BooleanToNumberParameterConverter(1, 0))
		.addParameterConverter("booleanToYN", new BooleanToStringParameterConverter("Y", "N"))
		.addParameterConverter("booleanToTF", new BooleanToStringParameterConverter("T", "F"))
		.addParameterConverter("dateToString", new DateToStringParameterConverter("yyyy-MM-dd HH:mm:ss"))
		.addParameterConverter("enumToName", new EnumToNameParameterConverter())
		.addParameterConverter("enumToOrdinal", new EnumToOrdinalParameterConverter())
		.addParameterConverter("dateToSqlDate", new DateToSqlDateParameterConverter())
		.addParameterConverter("dateToSqlTime", new DateToSqlTimeParameterConverter())
		.getFreemarkerDynamicQlBuilder();

If you find any incorrect sentence or invalid information, please feel free to edit.

Clone this wiki locally