码迷,mamicode.com
首页 > 其他好文 > 详细

ibatis 参数之模糊查询

时间:2015-06-15 23:44:53      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

 因项目需要最近使用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注入。

ibatis 参数之模糊查询

标签:

原文地址:http://www.cnblogs.com/EncryptingLife/p/4579486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!