首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jdbi版本3,字符串模板何时转义<,>字符?

jdbi版本3,字符串模板何时转义<,>字符?
EN

Stack Overflow用户
提问于 2019-12-08 14:35:07
回答 1查看 947关注 0票数 2

我使用jdbi3和StringTemplate 4模板引擎,我有以下测试查询:

代码语言:javascript
复制
    @SqlQuery("select * from test "
        + "where field1 = 5"
        + "<if(cond1)> or field2 \\<= :value1<endif>"
        + "<if(cond2)> or field2 >= :value2<endif>"
        + "<if(cond3)> or field2 in (<values>)<endif>")
@RegisterBeanMapper(Test.class)
@UseStringTemplateEngine
public List<Test> selectTest(
        @Define("cond1") boolean cond1, @Bind("value1") int value2,
        @Define("cond2") boolean cond2, @Bind("value2") int value3,
        @Define("cond3") boolean cond3,
        @BindList(value="values", onEmpty=BindList.EmptyHandling.NULL_STRING ) List<Integer> values);

使用StringTemplate引擎时,我必须用\转义查询中的字符<>?通过测试,我发现我必须像以前一样在查询中转义<=

在使用@BindList的In子句中,我必须使用<values>,但在本例中,我希望像\\<values>一样转义它,否则它将被StringTemplate用作属性,但是如果我这样做,查询就不能工作。

关于>=是否转义,在查询中似乎是一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-20 11:24:43

引言

让我们考虑:

  • 3.27.1 Jdbi版本作为当前的Jdbi版本。
  • 4.3.1 StringTemplate版本作为当前的StringTemplate版本,因为当前的Jdbi版本使用它。请看:v3.27.1·jdbi/jdbi /jdbi

回答

Jdbi

文档:要转义的字符

请注意要转义的字符的警告:

由于StringTemplate默认使用<字符标记ST表达式,因此可能需要转义一些SQL:String datePredSql = "<if(datePredicate)> <dateColumn> \\< :dateFilter <endif>"。 - jdbi/index.adoc v3.27.1·jdbi/jdbi

单元测试:不要转义@BindList变量名

请参阅BindListTest.ifValueGivenWithNullValueOptionThenResultIsTruthy()测试方法:jdbi/BindListTest.java v3.27.1·jdbi/jdbi

请注意,测试涵盖了一个非常类似的注释方法:

代码语言:javascript
复制
@SqlQuery("select name from something <if(name)> where name in (<name>) <endif>")
@UseStringTemplateEngine
List<String> getForValue(@Nonnull @BindList(value = "name", onEmpty = NULL_VALUE) List<String> name);

请注意,@BindList变量名没有转义:

代码语言:javascript
复制
in (<name>)

StringTemplate

文档:要转义的字符

请注意要转义的字符:

模板是文本和表达式元素的序列,可选地加上注释。在最粗糙的层面上,基本要素是: 文本<!评论!> 带有反斜杠字符的转义分隔符:\<\>。 - ·为4.3.1·antlr/stringtemplate4 4

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59236448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档