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注入。

posted @ 2015-06-15 23:17  有没有人知道  阅读(399)  评论(0编辑  收藏  举报