Java查询Mysql数据库时,查询条件带有反斜线\的处理方式

一. 知识储备

     1. 在Java中,如果想用字符串表示一个反斜线,则需要使用"\\"。直接使用"\"会报错。

        

       原因在于: java编译器会误以为\是用来转义后面跟着的"符号。

     2. 在Java正则表达式中,如果想匹配一个反斜线,则需要使用"\\\\",这是因为在正则匹配时,也会主动剥离一层转义字符。即

         "\" -> "\\" -> "\\\\"  这样的转换过程。

     3. 在Mysql中,如果想在查询条件中带上一个反斜线,则需要使用"\\\\"。这是因为反斜线在Mysql中也是转义字符,因此在语法解析时会进行一次转义。而当进行匹配时,同样用到了正则,又会剥离一次,最终与java的正则表达式一样,需要"\\\\"来表示一个反斜线。

二. 应用

    以Spring boot starter web为例,当controller层接收到含有一条反斜线的属性(或字符串)参数后,会像下图所示: 

    

     但实际上如果我们写测试用例模拟时,此处等价于  

    此处,我对该参数做了模糊查询,因此按照如下写法:

 scheduleEventVO.setDescription(scheduleEventVO.getDescription().replaceAll("\\\\", "\\\\\\\\"));
                criteria.andLike("description", StringUtils.stringLike(scheduleEventVO.getDescription()));

    目的是匹配每一条反斜线,替换成"\\",供Mysql查询。

发布了45 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/miaomiao19971215/article/details/90407130