Mybatis如何解决sql中like通配符模糊匹配问题

目录
  • sql中like通配符模糊匹配问题
    • 将查询条件通过功能类处理
    • 后台Contronller获得查询条件
    • mapper.xml中对应的使用方法
  • 使用like实现模糊匹配
    • 方式一
    • 方式二
    • 方式三

sql中like通配符模糊匹配问题

针对oracle数据库:

将查询条件通过功能类处理

/**
     * Description: 处理转义字符%和_,针对ORACLE数据库
     * 
     * @param str
     * @return
     */
    public static String escapeStr(String str) {
        String temp = "";
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '%' || str.charAt(i) == '_') {
                temp += "\\" + str.charAt(i);
            } else {
                temp += str.charAt(i);
            }
        }
        return temp;
    }

后台Contronller获得查询条件

并调用工具类处理

String areaname = request.getParameter("Areaname");
    if (areaname != null) {
        if ("".equals(areaname)) {
            areaname = null;
        } else {
            areaname = StringUtils.escapeStr(areaname);
            }
        }

mapper.xml中对应的使用方法

<if test="param.areaname!=null"> and areaname like '%'||#{param.areaname}||'%' escape '\'</if>

使用like实现模糊匹配

方式一

select * from t_user where name like ' %${value}% '

方式二

select * from t_user where name like '%'||${value}||'%'

方式三

select * from t_user where name like #{do_it_in_java}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis/mybatis-plus模糊查询语句特殊字符转义拦截器的实现

    目录 1.使用mybatis提供的拦截器拦截所有的查询请求. 2.定义SQL语句转义模板,分别对Map和Object对象进行处理 mybatis/mybatis-plus模糊查询语句特殊字符转义拦截器 在开发中,我们通常会遇到这样的情况.用户在录入信息是录入了'%',而在查询时无法精确匹配'%'.究其原因,'%'是MySQL的关键字,如果我们想要精确匹配'%',那么需要对其进行转义. 1.使用mybatis提供的拦截器拦截所有的查询请求. 具体实现在代码中均有注释 import lombok.e

  • 详解Mybatis中万能的Map和模糊查询写法

    1.万能的Map 假设,我们的实体类,或者数据库中的表,字段或参数过多,我们接口参数以前用的是实体类,现在考虑使用下Map! 接口: //万能的Map int addUser2(Map<String,Object> map); mapper.xml: <!--Map中的key--> <insert id="addUser2" parameterType="map"> insert into mybatis.user (id,nam

  • 解决MyBatis中模糊搜索使用like匹配带%字符时失效问题

    目录 1.问题背景 2.解决方法 2.1.在入参SearchVo上进行特殊符号relpace转换 2.2.使用ESCAPE 2.3.总结 1.问题背景 Mybatis是我们日常项目中经常使用的框架,在项目中我们一般会使用like查询作为模糊匹配字符进行搜索匹配,下面的Mapper.xml是我们使用like在项目中进行模糊匹配的常用方式: <sql id="searchCondition"> <trim prefix="where" prefixOv

  • Mybatis如何解决sql中like通配符模糊匹配问题

    目录 sql中like通配符模糊匹配问题 将查询条件通过功能类处理 后台Contronller获得查询条件 mapper.xml中对应的使用方法 使用like实现模糊匹配 方式一 方式二 方式三 sql中like通配符模糊匹配问题 针对oracle数据库: 将查询条件通过功能类处理 /**      * Description: 处理转义字符%和_,针对ORACLE数据库      *       * @param str      * @return      */     public st

  • Mybatis下动态sql中##和$$的区别讲解

    一.介绍 mybatis 中使用 Mapper.xml里面的配置进行 sql 查询,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "Jack"; 上述 sql 中,我们希望 name 后的参数 "Jack" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 Mapper.xml文件中使用如下的 sql 可以实现动态传递参数 name: select * from u

  • 基于mybatis注解动态sql中foreach工具的方法

    目录 实现目标 工具类 测试 集成进spring后的使用方法 Mapper层 Provider层 Ognl问题 解决方案 创建一个DefaultMemberAccess.java文件 改造ForeachMybatisUtils.java类 实现目标 由于在注解版mybatis中手动循环拼接动态sql容易出错 请看mybatis注解动态sql注入map和list(防sql注入攻击),所以封装了这个类似于foreach标签的工具方法. 由于mybatis(3.5.6.3.5.7 or earlier

  • 在MySQL中使用通配符时应该注意的问题

    现象: 有一个表 action_conf,数据如下: 如果想获取以exp_site_10_开头的en_name的记录,sql语句该如何写? so easy! select en_name from action_conf where en_name like 'exp_site_10_%' 很自信的在idb中执行了这条sql,就会发现结果并不是所预期的. 你会发现,执行上面的sql会把所有以 exp_site_10开头的记录都列出来了.    原因: 其实,这都是sql中的通配符在作怪.在sql

  • mybatis注解动态sql注入map和list方式(防sql注入攻击)

    目录 网上的教程 我的教程(防sql注入攻击) 注入Map 注入List 封装foreach mybatis防止sql注入的循环map写法 网上的教程 配置xml 注解中写xml脚本@Select() 使用Java类中的Java方法拼写sql语句(不防sql注入攻击的纯字符串拼接) 我的教程(防sql注入攻击) 注入Map Mapper层代码 @Repository public interface ManageMapper { @SelectProvider(type = ManageProv

  • 在php7中MongoDB实现模糊查询的方法详解

    前言 在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单: db.collection.find({'_id': /^5101/}) 上面这句就是查询_id以'5101'开始的内容. 在老的MogoDB中模糊查询挺简单的,这里简单记录下模糊查询的操作方式: 命令行下: db.letv_logs.find({"ctime":/uname?/i}); php操作 $query=array("name"=>new Mongo

  • Python实现字符串模糊匹配方式

    目录 Python字符串模糊匹配 包含四个参数 python-re模块,模糊匹配 Python字符串模糊匹配 Python的difflib库中get_close_matches方法 包含四个参数 x:被匹配的字符串. words:去匹配的字符串列表. n,前topn个最佳匹配返回,默认为3. cutoff:匹配度大小,为[0, 1]浮点数,默认数值0.6. import difflib list1 = ['ape', 'apple', 'peach', 'puppy'] difflib.get_

  • SQL查询语句通配符与ACCESS模糊查询like的解决方法

    ACCESS的通配符和SQL SERVER的通配符比较===================================================ACCESS库的通配符为:*   与任何个数的字符匹配?   与任何单个字母的字符匹配 SQL Server中的通配符为:% 与任何个数的字符匹配_ 与单个字符匹配正文我今天在写个页面的时候,也很郁闷,表中明明有记录,但在ASP里就是搜索不到,理论的sql语句如下:Select * FROM t_food Where t_food.name

  • mybatis的动态SQL和模糊查询实例详解

    现在以一个例子来介绍mybatis的动态SQL和模糊查询:通过多条件查询用户记录,条件为姓名模糊匹配,并且年龄在某两个值之间. 新建表d_user: create table d_user( id int primary key auto_increment, name varchar(10), age int(3) ); insert into d_user(name,age) values('Tom',12); insert into d_user(name,age) values('Bob

随机推荐