From 6f57ee9d6e21f25dbdbca5aaa9cddfde63403455 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Fri, 22 Mar 2024 15:12:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0freemarker=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 +- .../util/freemark/DatabaseTemplateLoader.java | 83 +++++++++++++++++++ .../freemark/FreemarkerConfiguration.java | 15 ++++ .../RowMapperStatementBuilder.java | 2 +- .../util/{ => mybatis}/RowSqlMapper.java | 3 +- .../com/supervision/AskApplicationTests.java | 30 +++++-- 6 files changed, 133 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/supervision/util/freemark/DatabaseTemplateLoader.java create mode 100644 src/main/java/com/supervision/util/freemark/FreemarkerConfiguration.java rename src/main/java/com/supervision/util/{ => mybatis}/RowMapperStatementBuilder.java (99%) rename src/main/java/com/supervision/util/{ => mybatis}/RowSqlMapper.java (98%) 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> maps = sqlMapper.selectList("",params); System.out.println(maps); } + @Autowired + private Configuration databaseFreemarkerConfiguration; + + @Test + void dbFreemarkerLoadTest() throws IOException, TemplateException { + + Template temp = databaseFreemarkerConfiguration.getTemplate("1770984442920292354"); + StringWriter writer = new StringWriter(); + HashMap params = new HashMap<>(); + params.put("jykh_count","ss"); + temp.process(params, writer); + System.out.println(writer); + writer.close(); + + } + + + }