diff --git a/pom.xml b/pom.xml
index e25ba0c..7bca64a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,7 @@
5.8.16
3.3.1
3.0.3
+ 42.2.18
@@ -51,7 +52,7 @@
org.postgresql
postgresql
- 42.3.8
+ ${postgresql.version}
org.projectlombok
@@ -80,6 +81,11 @@
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-freemarker
+
+
diff --git a/src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java b/src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java
new file mode 100644
index 0000000..af2e332
--- /dev/null
+++ b/src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java
@@ -0,0 +1,83 @@
+package com.supervision.util.freemark;
+
+import cn.hutool.core.util.ObjUtil;
+import com.supervision.domain.IrKnowledge;
+import com.supervision.service.IrKnowledgeService;
+import freemarker.cache.TemplateLoader;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.io.Reader;
+import java.io.StringReader;
+
+/**
+ * Created by xiaoj on 2016/9/8.
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class DatabaseTemplateLoader implements TemplateLoader {
+
+ private final IrKnowledgeService irKnowledgeService;
+
+ @Override
+ public Object findTemplateSource(String templateId) {
+ try {
+ IrKnowledge irKnowledge = irKnowledgeService.getById(templateId);
+ long lastModified = ObjUtil.isNull(irKnowledge.getUpdateTime()) ? 0L : irKnowledge.getUpdateTime().getNano();
+ return new StringTemplateSource(templateId, irKnowledge.getResultTemplate(),lastModified);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ @Override
+ public long getLastModified(Object templateSource) {
+ return ((StringTemplateSource) templateSource).lastModified;
+ }
+
+ @Override
+ public Reader getReader(Object templateSource, String encoding) {
+ return new StringReader(((StringTemplateSource) templateSource).source);
+ }
+
+ @Override
+ public void closeTemplateSource(Object templateSource) {
+ //do nothing
+ }
+
+ private static class StringTemplateSource {
+ private final String name;
+ private final String source;
+ private final long lastModified;
+
+ StringTemplateSource(String name, String source, long lastModified) {
+ if (name == null) {
+ throw new IllegalArgumentException("name == null");
+ }
+ if (source == null) {
+ throw new IllegalArgumentException("source == null");
+ }
+ if (lastModified < -1L) {
+ throw new IllegalArgumentException("lastModified < -1L");
+ }
+ this.name = name;
+ this.source = source;
+ this.lastModified = lastModified;
+ }
+
+ public boolean equals(Object obj) {
+ if (obj instanceof StringTemplateSource) {
+ return name.equals(((StringTemplateSource) obj).name);
+ }
+ return false;
+ }
+
+ public int hashCode() {
+ return name.hashCode();
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java b/src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java
new file mode 100644
index 0000000..b835d8f
--- /dev/null
+++ b/src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java
@@ -0,0 +1,15 @@
+package com.supervision.util.freemark;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class FreemarkerConfiguration {
+ @Bean("databaseFreemarkerConfiguration")
+ public freemarker.template.Configuration databaseTemplateLoader(DatabaseTemplateLoader databaseTemplateLoader) {
+ freemarker.template.Configuration configuration = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_30);
+ configuration.setTemplateLoader(databaseTemplateLoader);
+ return configuration;
+ }
+}
diff --git a/src/main/java/com/supervision/util/RowMapperStatementBuilder.java b/src/main/java/com/supervision/util/mybatis/RowMapperStatementBuilder.java
similarity index 99%
rename from src/main/java/com/supervision/util/RowMapperStatementBuilder.java
rename to src/main/java/com/supervision/util/mybatis/RowMapperStatementBuilder.java
index 6dafe88..1a0af28 100644
--- a/src/main/java/com/supervision/util/RowMapperStatementBuilder.java
+++ b/src/main/java/com/supervision/util/mybatis/RowMapperStatementBuilder.java
@@ -1,4 +1,4 @@
-package com.supervision.util;
+package com.supervision.util.mybatis;
import org.apache.ibatis.builder.StaticSqlSource;
import org.apache.ibatis.mapping.*;
diff --git a/src/main/java/com/supervision/util/RowSqlMapper.java b/src/main/java/com/supervision/util/mybatis/RowSqlMapper.java
similarity index 98%
rename from src/main/java/com/supervision/util/RowSqlMapper.java
rename to src/main/java/com/supervision/util/mybatis/RowSqlMapper.java
index 8ff4366..85794ea 100644
--- a/src/main/java/com/supervision/util/RowSqlMapper.java
+++ b/src/main/java/com/supervision/util/mybatis/RowSqlMapper.java
@@ -1,5 +1,6 @@
-package com.supervision.util;
+package com.supervision.util.mybatis;
+import com.supervision.util.mybatis.RowMapperStatementBuilder;
import org.apache.ibatis.exceptions.TooManyResultsException;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Component;
diff --git a/src/test/java/com/supervision/AskApplicationTests.java b/src/test/java/com/supervision/AskApplicationTests.java
index c9e15b2..d703d94 100644
--- a/src/test/java/com/supervision/AskApplicationTests.java
+++ b/src/test/java/com/supervision/AskApplicationTests.java
@@ -1,7 +1,10 @@
package com.supervision;
import com.supervision.service.IrKnowledgeService;
-import com.supervision.util.RowSqlMapper;
+import com.supervision.util.mybatis.RowSqlMapper;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
@@ -10,6 +13,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import java.io.IOException;
+import java.io.StringWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -28,18 +33,33 @@ class AskApplicationTests {
@Autowired
private RowSqlMapper sqlMapper;
@Test
- void RowSqlMapperTest() {
+ void rowSqlMapperTest() {
HashMap params = new HashMap<>();
params.put("id", "111");
//params.put("dept_name","沈阳公安");
// and dept_name= #{dept_name}
- //
- // and dept_name= #{dept_name}
- //
List