MyBatis中使用bind标签构造模糊查询失败的解决方法

原创 2017年01月03日 23:54:30

下面的这个写法为什么不能成功:

<select id="findUserByFuzzyEmail" resultMap="BaseResultMap"
        parameterType="com.keymen.entity.User">
        <bind name="email" value="'%' +email + '%'" />
        select id,username,email,status,createtime,updatetime from tb_user
        where
        <if test="email != null and email != ''">
            email like ${email}
        </if>
    </select>

异常提示:

Exception in thread "main" org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'email' in 'class java.lang.String'
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)
    at com.sun.proxy.$Proxy16.selectList(Unknown Source)
    后续代码省略...

为什么呢?

问题需要这样来解决:

在user.xml文件中做出如下改的:

注意:
parameterType使用了java.lang.String类型
bind标签的value值得写法:value="'%'+_parameter.getEmail() +'%'"
SQL语句中使用: email like #{pattern},注意是#,而不是$
最后,测试时使用的代码也需要注意。

<select id="findUserByFuzzyEmail" resultMap="BaseResultMap"
        parameterType="java.lang.String">
        select id,username,email,status,createtime,updatetime from tb_user
        <bind name="pattern" value="'%'+_parameter.getEmail() +'%'" />
        <where>
            <if test="email != null and email != ''">
                email like #{pattern}
            </if>
        </where>
    </select>

调用时,使用的测试代码:

userTest是User类的一个对象

List<User> userListByEmail = userServiceImpl.findUserByFuzzyEmail(userTest);

查询获得了正确的结果。

版权声明:本文为博主原创文章,未经博主允许不得转载。

MyBatis中Like语句中使用bind标签

select id,sex,age,username,password from user where username LIKE #{pattern}
  • zsg88
  • zsg88
  • 2017年05月12日 13:34
  • 1172

mybatis bind 插入不同表

insert into ${tableName} (SAMPLECHAR, SAMPLEVARCHAR, SAMPLEVARCHAR2, SAMPLEINT, 需求是数据过多的话,按照has...

MyBatis中的OGNL教程

MyBatis中的OGNL教程
  • isea533
  • isea533
  • 2015年12月05日 18:47
  • 21885

使用bind标签创建变量

bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。 select * from tbl_employee where...

深入了解MyBatis参数

相信很多人都遇到过下面这些异常:"Parameter 'xxx' not found. Available parameters are [...]"等等 不只是上面提到的这几个,我认为有很多的错误都...
  • isea533
  • isea533
  • 2015年03月02日 09:36
  • 116766

Mybatis的<where><foreach><set>等标签详解

sql语句where条件中,需要一些安全判断,例如按性别检索,如果传入的参数是空的,此时查询出的结果很可能是空的,也许我们需要参数为空 时,是查出全部的信息。这是我们可以使用动态sql,增加一个判断,...
  • zenson_g
  • zenson_g
  • 2013年08月21日 11:08
  • 108637

Mybatis中的三个标签<where> <set> <trim>

一。标签 1.复制上文工程,重命名为Mybatis08工程,工程结构图如下: 2.修改UserInfoMapper.xml,具体内容如下: [html] view p...

Mybatis中mapper.xml中的模糊查询

1,mybatis中的mapper文件中是一些sql的逻辑化存储,所以他们还是要遵循基本的数据库的语法规范,所以关于模糊查询就还是用like关键字用%去匹配一个 或者多个字符,但是因为模糊查询的时候...
  • Rava722
  • Rava722
  • 2016年10月19日 15:04
  • 3725

Mybatis各种模糊查询

模糊查询: 工作中用到,写三种用法吧,第四种为大小写匹配查询   1. sql中字符串拼接    SELECT * FROM tableName WHERE name LIKE CONCAT(...

wordpress文章导入csdn

package com.lutai.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.faste...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MyBatis中使用bind标签构造模糊查询失败的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)