MyBatis做动态模糊查询时,like后面要不要加单引号??

做项目遇到了个奇怪的问题,项目里面要对商品、账户、进行分别的多条件查询,于是我就采用动态多条件分页查询,起初在做账户部分的时候Mybatis是这样写的

<!-- 动态多条件分页查询 -->
  <select id="searchPageUseDyc" parameterType="page" resultMap="accountResultMap">
      select acc_id,acc_login,acc_name,acc_pass
      from account
      <where>
          <if test="paramsEntity.accId!=null">
              and acc_id like #{paramsEntity.accId}
          </if>
          <if test="paramsEntity.accLogin!=null">
              and acc_login like #{paramsEntity.accLogin}
          </if>
          <if test="paramsEntity.accName!=null">
              and acc_name like #{paramsEntity.accName}
          </if>
          <if test="paramsEntity.accPass!=null">
              and acc_pass like #{paramsEntity.accPass}
          </if>
      </where>
      limit #{start},#{rows}
  </select>

like 后面直接跟 #{paramsEntity.accName} 不需要添加单引号

然后完成商品查询的时候我一样写了一套

<!-- 动态分页多条件查询(找内容) -->
  <select id="searchPageUseDyc" parameterType="page" resultMap="goodsResultMap">
      select goods_Id,goods_name,goods_unit,goods_type,goods_color,goods_store,goods_limit,goods_commission,goods_producer,goods_remark,goods_sel_price,goods_buy_price
      from goods
      <where>
          <if test="paramsEntity.goodsId!=null">        and goods_Id like ${paramsEntity.goodsId}      </if>
          <if test="paramsEntity.goodsName!=null">        and goods_name like ${paramsEntity.goodsName}      </if>
          <if test="paramsEntity.goodsUnit!=null">        and goods_unit like ${paramsEntity.goodsUnit}      </if>
          <if test="paramsEntity.goodsType!=null">        and goods_type like ${paramsEntity.goodsType}      </if>
          <if test="paramsEntity.goodsColor!=null">        and goods_color like ${paramsEntity.goodsColor}      </if>
          <if test="paramsEntity.goodsStore!=null">        and goods_store like ${paramsEntity.goodsStore}      </if>
          <if test="paramsEntity.goodsLimit!=null">        and goods_limit like ${paramsEntity.goodsLimit}      </if>
          <if test="paramsEntity.goodsCommission!=null">        and goods_commission like ${paramsEntity.goodsCommission}      </if>
          <if test="paramsEntity.goodsProducer!=null">        and goods_producer like ${paramsEntity.goodsProducer}      </if>
          <if test="paramsEntity.goodsRemark!=null">        and goods_remark like ${paramsEntity.goodsRemark}      </if>
          <if test="paramsEntity.goodsSelPrice!=null">        and goods_sel_price like ${paramsEntity.goodsSelPrice}      </if>
          <if test="paramsEntity.goodsBuyPrice!=null">        and goods_buy_price like ${paramsEntity.goodsBuyPrice}      </if>
      </where>
      limit #{start},#{rows}
  </select>

但是运行报错了!!!

错误信息You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘%% limit 0,3‘ at line 3

然后我就给单引号添加上了,然后居然就成了,代码这样子

<!-- 动态分页多条件查询(找内容) -->
  <select id="searchPageUseDyc" parameterType="page" resultMap="goodsResultMap">
      select goods_Id,goods_name,goods_unit,goods_type,goods_color,goods_store,goods_limit,goods_commission,goods_producer,goods_remark,goods_sel_price,goods_buy_price
      from goods
      <where>
          <if test="paramsEntity.goodsId!=null">        and goods_Id like ‘${paramsEntity.goodsId}‘      </if>
          <if test="paramsEntity.goodsName!=null">        and goods_name like ‘${paramsEntity.goodsName}‘      </if>
          <if test="paramsEntity.goodsUnit!=null">        and goods_unit like ‘${paramsEntity.goodsUnit}‘      </if>
          <if test="paramsEntity.goodsType!=null">        and goods_type like ‘${paramsEntity.goodsType}‘      </if>
          <if test="paramsEntity.goodsColor!=null">        and goods_color like ‘${paramsEntity.goodsColor}‘      </if>
          <if test="paramsEntity.goodsStore!=null">        and goods_store like ‘${paramsEntity.goodsStore}‘      </if>
          <if test="paramsEntity.goodsLimit!=null">        and goods_limit like ‘${paramsEntity.goodsLimit}‘      </if>
          <if test="paramsEntity.goodsCommission!=null">        and goods_commission like ‘${paramsEntity.goodsCommission}‘      </if>
          <if test="paramsEntity.goodsProducer!=null">        and goods_producer like ‘${paramsEntity.goodsProducer}‘      </if>
          <if test="paramsEntity.goodsRemark!=null">        and goods_remark like ‘${paramsEntity.goodsRemark}‘      </if>
          <if test="paramsEntity.goodsSelPrice!=null">        and goods_sel_price like ‘${paramsEntity.goodsSelPrice}‘      </if>
          <if test="paramsEntity.goodsBuyPrice!=null">        and goods_buy_price like ‘${paramsEntity.goodsBuyPrice}‘      </if>
      </where>
      limit #{start},#{rows}
  </select>

然后我就去查文档,光放文档给出的也是不用加单引号的!!

<select id=”findActiveBlogLike”
  parameterType=”Blog” resultType=”Blog”>
  SELECT * FROM BLOG
  <where>
    <if test=”state != null”>
      state = #{state}
    </if>
    <if test=”title != null”>
      AND title like #{title}
    </if>
    <if test=”author != null and author.name != null”>
      AND title like #{author.name}
    </if>
  </where>
</select>

我的问题还真不知道出在哪里!!!奇了怪了,有空再去搞清楚吧 !!!!

时间: 2024-12-07 20:54:27

MyBatis做动态模糊查询时,like后面要不要加单引号??的相关文章

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

mybatis做like模糊查询

这个网站中有很多方法.https://code.google.com/p/mybatis/issues/detail?id=85 自己试验了如下的方法. 1.  参数中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <select id="selectPersons" resultType="person" parameterType="

Hibernate使用createSqlQuery进行模糊查询时找不到数据

1. 首先明确一点,使用createSqlQuery如下两种方式的占位符都可以使用,这个在官方的文档可以查到. 注意使用模糊查询时,赋值两边不可以添加单引号. Query query = sess.createSQLQuery("SELECT * FROM CATS WHERE NAME like ?").addEntity(Cat.class); List pusList = query.setString(0, "Pus%").list(); query = s

Mybatis框架的模糊查询(多种写法)、删除、添加

学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "htt

mybatis oracle 分页+模糊查询

实现分页的方式有很多,但常用的是通过SQL来显示分页. 下面就来介绍mybatis 来实现Oracle分页的写法:(ps:不同数据库的写法有区别) 一.分页数据: 1 <select id="findPageByCode" parameterType="java.util.Map" resultMap="pageVO"> 2 select * from 3 ( 4 select A.* ,ROWNUM rn 5 from (selec

JavaScript根据Json数据来做的模糊查询功能

类似于百度搜索框的模糊查找功能 需要有有已知数据,实现搜索框输入字符,然后Js进行匹配,然后可以通过鼠标点击显示的内容,把内容显示在搜索框中 当然了,正则只是很简单的字符匹配,不具备多么复杂的判断 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模糊查询</title> <style> *{

mybatis中的模糊查询,Oracle和MySQL中的concat

MySQL数据库,利用concat函数即可,MySQL不用能||连接字符串 mapper.xml select * from tb_content_category where title like concat('%',#{paramMap.TITLE, jdbcType=VARCHAR},'%') Oracle数据库,利用concat函数或者||,Oracle数据库利用concat函数时,需要嵌套concat,因为Oracle的concat函数每次只能连接两个字符串 mapper.xml s

Mybatis中的模糊查询

1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 我就是按照此方法实现了功能. 其实还有种方法:像这样写也行: 2. 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE '%${text}%'; 这个我试过之后,发现并没有实现模糊查询的功能,而且目前也不知道哪里出错了,如果有人知道请指教. 3. 程序中拼

mybatis中llike模糊查询中#和$的使用,以及bind标签的使用

关于#{}和${}就是jdbc中的预编译和非预编译 1.表达式: name like"%"#{name}"%" 打印的日志 ==>  Preparing: select * from user WHERE name like"%"?"%" ==>Parameters: 傻(String), 1(Integer) 能够查询出来,没有问题,这是使用了占位符来占位,写成SQL就是: name like "%&q