• ibatis 参数之模糊查询


     因项目需要最近使用ibatis,在使用查询语句的时候,想着通用性所以没有在配置文件里用N多的and 语句,而是如下:

    <select id="getUsersList" resultClass="userInfo" parameterClass="java.util.HashMap">
            select user_id userId,user_no
            userNo,user_name userName, pass
            pass,area_no areaNo,phone phone, mail
            mail,is_admin
            isAdmin,'status' 'status',create_date createDate,
            last_login_date
            lastLoginDate, last_login_ip lastLoginIp from
            p_sys_user
        
        <isParameterPresent>
            <isNotNull property="conditional">
                where  #conditional#
              </isNotNull>
              <isNotNull property="orderByClause">
                order by #orderByClause#
              </isNotNull>
              <isNotNull property="pageStart">
                limit #pageStart#, #pageEnd#
              </isNotNull>
        </isParameterPresent>
                           
            
        </select>
    View Code

    页面上如此调用:

       String conditional=" user_no  like concat('%', 'q', '%')";
                int pageSize=Integer.valueOf(request.getParameter("rows"));
                int pageIndex=Integer.valueOf(request.getParameter("page"));    
                users = userService.getSysUserList(pageSize, conditional, pageIndex, "user_id asc");

    结果在日志里出现的语句放在数据库是可以执行的,但是就是一直取不到正确的数据,后来发现是ibatis的$与#的区别导致的,将配置文件改成

    <select id="getUsersList" resultClass="userInfo" parameterClass="java.util.HashMap">
            select user_id userId,user_no
            userNo,user_name userName, pass
            pass,area_no areaNo,phone phone, mail
            mail,is_admin
            isAdmin,'status' 'status',create_date createDate,
            last_login_date
            lastLoginDate, last_login_ip lastLoginIp from
            p_sys_user
        
        <isParameterPresent>
            <isNotNull property="conditional">
                where  $conditional$
              </isNotNull>
              <isNotNull property="orderByClause">
                order by #orderByClause#
              </isNotNull>
              <isNotNull property="pageStart">
                limit #pageStart#, #pageEnd#
              </isNotNull>
        </isParameterPresent>
                           
            
        </select>
    View Code

    一切正常,因为#时,会当成字符串来解析所以没有得到正确的结果。这个错误调了好久记录下,但是这种得记住要注意SQL注入。

  • 相关阅读:
    自学Linux Shell5.2-shell内建命令history alias
    自学Linux Shell5.1-shell父子关系
    vue2.0 实现导航守卫(路由守卫)
    vue2.0 关于Vue实例的生命周期
    vue2.0 正确理解Vue.nextTick()的用途
    vue2.0 项目build后资源文件报错404的解决方案
    vue2.0 vetur插件提示 'v-for' directives require 'v-bind:key' directives 的解决办法
    vue2.0 微信oauth认证的正确调用位置
    vue2.0 样式表引入的方法 css sass less
    vue2.0 配置sass
  • 原文地址:https://www.cnblogs.com/EncryptingLife/p/4579486.html
Copyright © 2020-2023  润新知