zoukankan      html  css  js  c++  java
  • iBatis 中 Like '%iBatis%' 的写法实现模糊查询

    在写后台程序的时候,想做到按照单个字段进行模糊查询。

    一开始的做法是这样子写的:

    <dynamic prepend="WHERE">       
                <isNotNull prepend="AND" property="name">       
                      (name like #name#)       
                </isNotNull>       
     </dynamic>      

    但是这句的作用和

    select * from user where name = "aa"

    并没有实现模糊查询,我们是实现如下的语句

    select * from user where name like '%aa' 
    select * from user where name like 'aa%'
    select * from user where name like '%aa%' 
     

    在ibatis中该如何写了?一开始我配置成

    <dynamic prepend="WHERE">       
                <isNotNull prepend="AND" property="name">       
                      (name like ‘%#name#%’)       
                </isNotNull>       
     </dynamic> 

    但是程序报错,后来发现资料找到正确的写法有2种:

    1,要把上面的‘%#name#%’ 改成‘%$name$%’

    2, 用 || 连接字符串的方式,写成 (name like '%' || #name# || '%')

     

    $符号会把参数原样嵌入sql语句中而不进行预编译,这就使得有可能出现sql注入攻击。其实ibatis从根本上简单的说,凡是#的,都作为参数,用setobject方式预编译。而$方式的,则直接替换字符串。 所以说,$很不安全,会把用户的输入直接当参数放入 sql。

    # 会根据不同类型而生产字符串,如 String 类型 : aa ---> 'aa'
    $ 表示原生类型,如 String 类型 : aa ---> aa

  • 相关阅读:
    2019 湖湘杯 Reverse WP
    2017第二届广东省强网杯线上赛--Nonstandard
    2019 上海市大学生网络安全大赛 RE部分WP
    2019 360杯 re wp--Here are some big nums
    MATLAB图像的代数运算
    编辑和剪绳子-头条2019笔试题
    奖品分配-头条2019笔试题
    TrajPreModel
    multiheadattention-torch
    腾讯笔试题-邻值查找
  • 原文地址:https://www.cnblogs.com/iusmile/p/2607505.html
Copyright © 2011-2022 走看看