zoukankan      html  css  js  c++  java
  • MyBatis系列:模糊查询的4种实现方式

    1、根据姓名模糊查询员工信息

    1.1、方式一

    步骤一:编写配置文件

    步骤二:测试

    步骤三:分析 此种方式需要在调用处手动的去添加“%”通配符。1.2、方式二

    说明: 使用方式一可以实现模糊查询,但是有一点不方便的地方就是:在测试类中,调用selectList()方法传参时需要调用者手动的添加%号通配符,显然是麻烦的,能否在映射配置文件中直接将%号写好呢? 有的朋友可能会这么想,好办,直接在配置文件中这么写:形如1:

    测试后发现,程序会报错,原因是:缺少单引号。

    这个时候,有朋友可能会这样想了,那干脆加一个“单引号”不就得了,形如2:

    形如2:

    测试后发现,程序依然会报错,原因是:如果加上单引号,那么就当成是一个字符串,而#{ }写在字符串中不能识别,要改写成${ }这种形式。

    即:形如3

    形如3

    分析: 通过使用“$”也可以实现。但是通过$的方式拼接的sql语句,不再是以占位符的形式生成sql,而是以拼接字符串的方式生成sql,这样做带来的问题是:会引发sql注入的问题。1.3、方式三

    说明:通过前两种写法,虽然可以解决模糊查询的问题,但是还是不好,因为通过%的方式会引发sql注入的问题,现在的期望是:既能够解决sql注入又能在配置文件中写%该如何实现呢,可以借助mysql的函数。步骤一:编写映射文件

    步骤二:测试 此步骤省略,比较简单。1.4、方式四

    说明: 当然对于方式三,也可以使用$,不过需要特别留意单引号的问题。步骤一:编写配置文件

    步骤二:测试 该步骤省略。2、总结

    #{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,使用占位符的方式提高效率,可以防止sql注入。${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,可能引发sql注入。

  • 相关阅读:
    @RequestParam注解使用:Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
    cglib动态代理导致注解丢失问题及如何修改注解允许被继承
    springboot Autowired BeanNotOfRequiredTypeException
    git根据用户过滤提交记录
    不同包下,相同数据结构的两个类进行转换
    How to use Jackson to deserialise an array of objects
    jooq实践
    java如何寻找main函数对应的类
    Python--matplotlib
    Python 和 Scikit-Learn
  • 原文地址:https://www.cnblogs.com/hmy-1365/p/14363488.html
Copyright © 2011-2022 走看看