zoukankan      html  css  js  c++  java
  • Mybatis的如何根据下划线_,百分号%模糊查询escape的作用

    在使用mybatis的模糊查询时,有两个特殊符号需要注意:

    %:相当于任意多个字符;

    _:相当于任意的单个字符;

    我们需要对特殊字符进行转义,如:

    public static String escapeChar(String before){
       if(!ObjectUtils.isEmpty(before)){
       		 before = before.replaceAll("/", "//") ;
    		 before = before.replaceAll("_", "/_") ;
    		 before = before.replaceAll("%", "/%") ;
     }
       return before ;
    }
    

           但我们在使用LIKE关键字进行模糊查询时,“%”、“”单独出现时,会被认为是通配符,且上面我们对下划线和百分号进行转义过就查不出来了,该怎么办?为了在字符数据类型的列中查询是否存在百分号 (%)、下划线(),就需要有一种方法将LIKE判式中的这些字符看作是实际值,而不是通配符。关键字 ESCAPE允许确定一个转义字符将紧跟在转义字符之后的字符看作是实际值。

    使用escape来定义转义符。如:

    select * from A where a like '%sully/_%' escape '/';   
    select * from A where a like '%sully/%%' escape '/'; 
    

    escape ‘/’ 指用’/'说明后面的%或_就不作为通配符而是普通字符了,注意前面没有转义字符的%仍然起通配符作用
    结合mybatisplus

    if(ObjectUtils.isNotEmpty(name)){
      name = SQLEscapeUtil.escapeChar(name);
      wrapper.andNew("name like '%'||'" + name + "'||'%' escape '/'");
    }
    

    注意这里的空格和单引号都要是英文。

    • 模糊查询的三种常用写法: like concat(’%’,#{param},’%’) 或者 like ‘%${param}%’ ,还有就是上面那种 like ‘%’ || #{param} || ‘%’。
  • 相关阅读:
    python 发送邮件
    java 获取两个时间之前所有的日期
    java 子线程定时去更改主线程的变量
    post 两种方式 application/x-www-form-urlencoded和multipart/form-data
    aws 社交媒体技术大会 部分总结
    java操作Mongodb数据库
    实体类注解 @entity
    spring security 部分注解讲解
    @Column
    阿里云搭建服务器
  • 原文地址:https://www.cnblogs.com/seasail/p/12179366.html
Copyright © 2011-2022 走看看