
基于Mustache实现sql拼接
发布日期:2021-05-09 01:45:34
浏览次数:11
分类:博客文章
本文共 2633 字,大约阅读时间需要 8 分钟。
目录 -
-
目录
一、前言
Mustache语法是一种模板语法,它可以帮我们拼接我们想要的东西。入职新公司,而项目里的sql语句就是用Mustache语法来拼接的,网上关于这个的教程、资料比较少,所以自己也记录一下笔记,本篇笔记的内容主要是讲Mustache语法在web开发中的持久层用来拼接sql的应用,若想学习更多关于Mustache相关只是请参考:。
二、Mustache语法
Mustache 的模板语法很简单,就那么几个:
- {{keyName}}
- {{#keyName}} {{/keyName}}
- {{^keyName}} {{/keyName}}
- {{.}}
- {{<partials}}
- {{{keyName}}}
- {{!comments}}
此处具体使用可以参考博客:
三、Mustache拼接sql
持久层框架使用的是JPA,类申明如下,后文接口均在此类中:
/** * 模块定义操作持久层 * * @author csh * @date 2019/10/9 */public interface ModuleRepository extends PagodaJpaRepository, JpaSpecificationExecutor {}
3.1 单个参数拼接
/** * 根据项目主键查询模块详细信息 * * @param itemId 项目主键 * @return 模块详细信息 */ @SqlTemplate( name = "queryDetailById", sql = "SELECT id,item_id,module_code,module_name,path,remark,creator_name,creator_code,created_at,modifier_name,modifier_code,last_modified_at " + " FROM module WHERE item_id = :itemId AND del = 0" ) ListqueryDetailById(@Param("itemId") Long itemId);
这里使用“:”是为了防止sql注入
3.2 多个参数拼接
多个参数封装的实体类:
/** * 模块信息查询入参 * * @author csh * @date 2019/10/12 */@Datapublic class QueryModuleInput implements Serializable { /** * 项目中文名称 */ @NotNull private Long itemId; /** * 模块名称 */ @NotNull @NotBlank private String moduleName;}
接受查询参数的接口:
/** * 根据项目名、模块名进行复杂查询 * * @param moduleInput 项目名、模块名入参 * @return 返回查询出来的列表 */ @SqlTemplate( name = "complexQuery", sql = "SELECT id,item_id,module_code,module_name,path,remark,creator_name,creator_code,created_at,modifier_name,modifier_code,last_modified_at " + "FROM module WHERE del = 0 {{#itemId}} AND item_id = :itemId {{/itemId}} {{#moduleName}} AND module_name = :moduleName {{/moduleName}}" ) List注意:如果{{#keyName}} {{/keyName}}中的 keyName 值为 null, undefined, false;则不渲染输出任何内容。listByNames(QueryModuleInput moduleInput);
3.3 IN语法的拼接
/** * 根据模块查询接口 * * @param moduleIdList * @return */ @SqlTemplate( name = "findInterfaceByModuleId", sql = "select * from interface where 1=1" + "{{#moduleIdList_exists}} and module_id in ({{#moduleIdList}}{{^-first}}, {{/-first}}{{this}}{{/moduleIdList}}){{/moduleIdList_exists}}" ) List注意:其中 {{^-first}}, {{/-first}}是用来拼接“,”的; \'{{this}}\'中的斜杠视情况而加,如果list中是字符串就加,如果是整形则不必加斜杠。findInterfaceByModuleId(@Param("moduleIdList") List moduleIdList);
3.4 LIKE语法的拼接
// 调用concat函数来拼接{{#seqno}} and h.seqno like concat('%',:seqno,'%'){{/seqno}}// 直接拼接{{#con_cycle}} AND var.con_cycle like '{{con_cycle}}%'{{/con_cycle}}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月14日 16时32分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
12张图打开JMeter体系结构全局视角
2019-03-06
Spring Boot 2.x基础教程:构建RESTful API与单元测试
2019-03-06
[UWP 自定义控件]了解模板化控件(1):基础知识
2019-03-06
UWP 自定义控件:了解模板化控件 系列文章
2019-03-06
[UWP]从头开始创建并发布一个番茄钟
2019-03-06
WinUI 3 Preview 3 发布了,再一次试试它的性能
2019-03-06
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
2019-03-06
List数组排序
2019-03-06
VMware vSphere 离线虚拟机安装 BIND 9
2019-03-06
dojo/request模块整体架构解析
2019-03-06
Javascript定时器学习笔记
2019-03-06
dojo的发展历史
2019-03-06
Python存储系统(Redis)
2019-03-06
C语言指针收藏
2019-03-06
C#搞个跨平台的桌面NES游戏模拟器
2019-03-06
手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)
2019-03-06
《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖
2019-03-06
互联网App应用程序测试流程及测试总结
2019-03-06
根据轨迹分析出用户家在哪
2019-03-06
PostgreSQL查询表名称及表结构
2019-03-06