首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在执行maven原型生成时在mybatis mapper.xml中转义{

如何在执行maven原型生成时在mybatis mapper.xml中转义{
EN

Stack Overflow用户
提问于 2016-07-10 22:56:53
回答 2查看 366关注 0票数 0

因为我们现在使用spring+mybatis开发项目,所以我想创建一个maven原型,它可以生成一个包含一些演示代码和测试代码的空白项目,告诉新手如何使用spring+mybaits和如何编写单元测试。但是现在我遇到了一些问题,在archetype-resources中有一个archetype-resources/src/main/resources/sql/myapp/DemoUser.xml

代码语言:javascript
复制
<insert id="insertUser" useGeneratedKeys="true"
        keyProperty="id">
    insert into demo_user (mobile,nick) values (#{mobile},#{nick})
</insert>

在执行mvn archetype:generate ...之后,它变成

代码语言:javascript
复制
insert into demo_user (mobile,nick) values (#mobile,#nick)

然后我尝试了下面的方式来转义{,但在archetype-resources/pom.xml head add中失败了

代码语言:javascript
复制
#set( ${startbrace} = "{" )

然后修改DemoUser.xml

代码语言:javascript
复制
insert into demo_user (mobile,nick) values (#${startbrace}mobile},#${startbrace}nick})

但实际上它会生成以下代码

代码语言:javascript
复制
insert into demo_user (mobile,nick) values (#${startbrace}#obile},#${startbrace}#ick})

所以我对这种情况感到非常困惑。我想知道如何正确转义{

EN

回答 2

Stack Overflow用户

发布于 2016-07-11 15:51:28

这可能取决于您使用的Velocity版本。

使用Velocity 1.7+,原始问题不会发生((#{mobile},#{nick})按原样正确呈现),您的变通方法也可以正常工作。

我没有尝试用老版本的Velocity重现您的问题,但我认为问题来自于您在赋值中使用双引号的事实。所以你应该试一试:

代码语言:javascript
复制
#set( ${startbrace} = '{' )

单引号的内容是而不是解析的,所以它肯定可以工作,即使是在旧的Velocity版本中也是如此。

票数 0
EN

Stack Overflow用户

发布于 2016-07-12 22:50:28

我尝试了下面的方法来解决这个问题。在src/main/resources/archetype-resources/pom.xml head中添加

代码语言:javascript
复制
#set( $P = '#' )

然后在DemoUser.xml

代码语言:javascript
复制
insert into demo_user (mobile,nick) values (${P}{mobile},${P}{nick})

参考:http://velocity.apache.org/engine/devel/user-guide.html#escaping-invalid-vtl-references

代码语言:javascript
复制
#set( $D = '$' )
${D}{my:invalid:non:reference}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38293218

复制
相关文章

相似问题

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