当前位置: 首页 > news >正文

SpringBoot整合FreeMarker模板引擎

中文官方参考手册 http://freemarker.foofun.cn/

1.先加入FreeMarker依赖

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version>
</dependency>

2.新建一个FreeMarkerUtil工具类

public class FreeMarkerUtil {/*** 解析 freemarker 模版* @param path 模板所在目录 根目录为 resources* @param filename ftl文件名称* @param data 为模版设置的数据* @return String* @throws IOException*/public static String parseTemplate(String path, String filename,Object data) throws IOException {Configuration configuration = new Configuration(Configuration.getVersion());configuration.setDefaultEncoding("UTF-8");configuration.setClassForTemplateLoading(FreeMarkerUtil.class, path);configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);configuration.setWhitespaceStripping(true);Template template = configuration.getTemplate(filename);// 接收处理后的模版内容StringWriter stringWriter = new StringWriter();try{template.process(data,stringWriter);return stringWriter.toString();} catch (TemplateException e){return null;} finally {stringWriter.close();}}}

3.在resources目录下新建一个mysql建表模板createTemplate.ftl

CREATE TABLE ${databaseName}.${tableName} (<#list columns as column>${column.name} ${column.type}<#if column.autoIncrement> AUTO_INCREMENT</#if><#if column.notNull> NOT NULL</#if><#if column.primaryKey> PRIMARY KEY</#if><#if column.defaultVal != ""> DEFAULT '${column.defaultVal}'</#if><#if column.comment != ""> COMMENT '${column.comment}'</#if><#if (column_index < columns?size - 1)>,</#if></#list>
) ENGINE=${engine} DEFAULT CHARSET=${charset};

4.新建字段属性类ColumnInfo

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ColumnInfo {private String name;private String type;private boolean notNull;private boolean autoIncrement;private boolean primaryKey;private String defaultVal;private String comment;
}

5.根据数据构建模板

Map<String, Object> data = new HashMap<>();
String database = "******";
String tableName = "******";
data.put("databaseName", database);
data.put("tableName", tableName);
data.put("engine", "InnoDB");
data.put("charset", "utf8mb3");List<ColumnInfo> columns = new ArrayList<>();
columns.add(new ColumnInfo("id", "int", true, true, true, "","ID"));
columns.add(new ColumnInfo("name", "text", false, false, false, "","姓名"));
columns.add(new ColumnInfo("age", "text", false, false, false, "","年龄"));data.put("columns",columns);
String createTemplate = FreeMarkerUtil.parseTemplate("/", "createTemplate.ftl", data);
System.out.println(createTemplate);

6.结果生成

CREATE TABLE ******.****** (id int AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT 'ID',name text COMMENT '姓名',age text COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

数据插入模板

INSERT INTO ${databaseName}.${table} (${(columns)?join(", ")})
VALUES
<#list values as row>
(<#list row as val><#if val?has_content && val?is_string>'${val?html}'<#elseif val?has_content && val?is_date>{d '${val?date}'}<#elseif val?has_content && val?is_time>{t '${val?time}'}<#elseif val?has_content && val?is_datetime>{ts '${val?datetime}'}<#elseif val?has_content && val?is_boolean>${val?string("TRUE", "FALSE")}<#else>null</#if><#if val_index != row?size - 1>,</#if></#list>)<#if row_index != values?size - 1>,</#if>
</#list>

数据查询模板

SELECT
<#if !(groups?? && groups?size > 0) && !(aggregates?? && aggregates?size > 0)>*
<#else><#if (groups?? && groups?size > 0)><#list groups as group>${group} <#if group_has_next>,</#if></#list></#if><#if (groups?? && groups?size > 0) && (aggregates?? && aggregates?size > 0)>,</#if><#if (aggregates?? && aggregates?size > 0)><#list aggregates as agg>${agg}<#if agg_has_next>,</#if></#list></#if>
</#if>
FROM${tableName}
<#if filterElements??>
WHERE<#list filterElements as filterElement>( <#list filterElement.filters as filter>${filter.columnName} ${filter.functionalOperator} ${filter.values} <#if filter_has_next>    ${filter.logicalOperator} </#if></#list> ) <#if filterElement_has_next>    ${filterElement.logicalOperator} </#if></#list>
</#if>
<#if isGroup && groups??>
GROUP BY<#list groups as group>${group}<#if group_has_next>,</#if></#list>
</#if>
<#if orders??>
ORDER BY<#list orders as order>${order}<#if order_has_next>,</#if></#list>
</#if>
http://www.lryc.cn/news/277379.html

相关文章:

  • 编程基础 - 变量与常量
  • Linux入门攻坚——12、Linux网络属性配置相关知识2
  • 如何自己实现一个分布式事务
  • 使用Nonebot编写QQ机器人
  • 认识SpringBoot中的条件注解
  • 使用PAI-DSW搭建基于LangChain的检索知识库问答机器人
  • 优雅的通过Shell脚本生成Go的程序包
  • 益生菌抗癌?补充这种益生菌,抑制肝癌,还改善肠道健康
  • LLM漫谈(二)| QAnything支持任意格式文件或数据库的本地知识库问答系统
  • Linux环境vscode clang-format格式化:vscode clang format command is not available亲测有效!
  • Vue3前端 响应式数据 知识点
  • golang数据库连接池设置多少比较合适,如何设置?
  • 一、Mybatis 简介
  • 苹果Vision Pro将于1月27日上市!
  • 密码学(一)
  • VueRouter
  • 什么是React.FC | 封装ant design弹框组件之:ant design 修改密码弹框组件
  • DHCP
  • VS code的使用介绍
  • 【蓝桥杯选拔赛真题57】python兔子分胡萝卜 第十四届青少年组蓝桥杯python 选拔赛比赛真题解析
  • Spring MVC中JSON数据处理方式!!!
  • 学习JavaEE的日子 阶段回顾
  • 深入理解 Flink(一)Flink 架构设计原理
  • Python pip 常用指令
  • Eureka工作原理详解
  • 开源加解密库之GmSSL
  • 小程序分销商城,打造高效线上购物体验
  • Day2:【英文时评】当我们谈论海克斯科技的时候我们在谈论什么?(未完结)
  • Selenium-java 定位元素时切换iFrame时的方法
  • WinForms中的UI卡死