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

  • 相关阅读:
    ceph 网络配置
    Centos7.2 下DNS+NamedManager高可用部署方案完整记录
    Mysql多实例数据库
    Mysql 基础
    搭建本地YUM仓库
    Go实现线程安全的缓存
    KubeEdge安装详细教程
    Kubeedge实现原理
    Go语言中new()和make()的区别
    Go语言中append()函数的源码实现在哪里?
  • 原文地址:https://www.cnblogs.com/iusmile/p/2607505.html
Copyright © 2011-2022 走看看