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>

页面上如此调用:

   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>

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

时间: 2024-10-29 19:05:44

ibatis 参数之模糊查询的相关文章

springJdbc like模糊查询,Spring namedParameterJdbcTemplate like查询

springJdbc like模糊查询,Spring namedParameterJdbcTemplate like查询, SpringJdbc命名参数like模糊查询,namedParameterJdbcTemplate like模糊查询 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copy

[原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

模糊查询专题

在银行.销售.仓库管理等的数据查询系统中,我们经常会用到精确查询来准确获取想要的数据,但是很多时候我们并不记得确切的检索条件是什么,这样的话,必然会对我们获取数据造成一定的影响,而此时模糊查询的出现很好的解决了这个难题,因其可以根据用户输入的部分关键词,检索到与之相关联的所有选项数据,从而使用户能够尽可能快地找到所需的数据.与精准查询相比,更灵活.方便.快捷的模糊查询,在sql中常用like条件配合完成此操作. 好了,为了程序猿哥哥可以早日跟加班say goodbye , 不再做单身汪,让我们一

ibatis动态多条件查询及模糊查询(oracle,mysql,sql)

首先是模糊查询的问题,开始时我使用如下条件:select * from user where name like '%#value#%'. 可是怎么也不行,好像还报错了.后来在网上找到了解决方法,就是使用$来代替#号. 1>写成: like '%$value$%' 就可以了,<!-- 模糊查询不能用#,#是用prepareStatement的?插入参数,$是文本替换 -->, 2>同时还找到另一个方法,但是那个方法我试了很久,就是不行,方法为: like '%' || #value

8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)

多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public User() { } public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } private int id; private String name;

JDBC模糊查询参数的注入的注意点

笔者刚开始是这样写sql语句的String sql="SELECT * FROM bookBasicInfo,bookTypeInfo WHERE     bookBasicInfo.BelongType=bookTypeInfo.BookTypeID         AND bookBasicInfo.bookName like %?%";采用参数注入ps.setString(1,  bookName);但是在执行的过程中,java跑出如下异常java.sql.SQLExceptio

通过带参数的Sql语句来实现模糊查询(多条件查询)

#region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books"); List<string> listWheres = new List<string>(); List<SqlParameter> listParams = new List<SqlParameter>(); if (txtBookName.Text.T

Oracle模糊查询CONCAT参数个数无效

在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效 <if test="empId!=null and empId!=''"> and e.empId like CONCAT('%',#{empId},'%') </if> 异常信息: 经过查阅数个资料后得知Oracle的CONCAT函数不像MySql那样支持三个参数的拼接,需要把SQL语句修正为: and e.empId like

06Mybatis_根据用户的名字模糊查询返回List集合

本篇论文讲的是模糊查询然后返回的是一个list集合. 这片文章的案例是基于上一篇文章的,所以主要修改两处地方就可以了. 1.user.xml 2.Mybatis_first.java user.xml代码如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "htt