关闭

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

标签: mybatis
4055人阅读 评论(3) 收藏 举报
分类:

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

<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);

查询获得了正确的结果。

2
0
查看评论

MyBatis中Like语句中使用bind标签

select id,sex,age,username,password from user where username LIKE #{pattern}
  • zsg88
  • zsg88
  • 2017-05-12 13:34
  • 1633

mybatis bind 标签

bind 标签可以使用 OGNL 表达式创建一个变量井将其绑定到上下文中。在前面的例子中, UserMapper.xml 有一个 selectByUser 方法,这个方法用到了 like 查询条件,部分代码如下 。<if test=” userNarne != null and userNa...
  • zhq426
  • zhq426
  • 2017-12-08 13:04
  • 295

mybatis bind 插入不同表

insert into ${tableName} (SAMPLECHAR, SAMPLEVARCHAR, SAMPLEVARCHAR2, SAMPLEINT, 需求是数据过多的话,按照hash值 %4的余插入不同的表,提前建好了表0、1、2、3   关键就是  ...
  • xiaxiaorui2003
  • xiaxiaorui2003
  • 2016-09-18 15:17
  • 1356

MyBatis Bind标签

select count(1) from    c, (select cl.clientid,cl.clientname ,uc.userid from cl, uc where uc.clientid = cl.clientid and uc.userid = #{...
  • a502817870
  • a502817870
  • 2015-03-18 14:31
  • 3690

Mybatis的参数使用

刚开始使用Mybatis的时候,感觉一头雾水:由于数据库的实际操作已经给封装起来,只需要传入参数就可以,但是这些参数与SQL之间是怎样关联上的呢?是使用参数名称关联吗?如果有多个参数呢?如果使用数组或者列表呢? 下面来看个各种参数使用的例子: // DAO的实现类: public ...
  • swingline
  • swingline
  • 2013-05-18 17:37
  • 10792

mybatis-bind

mybatis-bind<select id="getEmpByConditionIf" parameterType="com.example.demo.entity.Employee" resultType="com.example.demo...
  • u014331288
  • u014331288
  • 2018-01-03 15:17
  • 22

mybatis # $

MyBatis/Ibatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的s...
  • u014331288
  • u014331288
  • 2016-12-25 15:43
  • 342

MyBatis中的OGNL教程

MyBatis中的OGNL教程
  • isea533
  • isea533
  • 2015-12-05 18:47
  • 23701

使用bind标签创建变量

bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。 select * from tbl_employee where _lastName like #{lastName} 测试类: @Test ...
  • yalishadaa
  • yalishadaa
  • 2017-05-20 17:44
  • 276

Mybatis各种模糊查询

模糊查询: 工作中用到,写三种用法吧,第四种为大小写匹配查询   1. sql中字符串拼接    SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '...
  • luqin1988
  • luqin1988
  • 2012-08-14 16:36
  • 76748
    个人资料
    • 访问:198909次
    • 积分:3968
    • 等级:
    • 排名:第9449名
    • 原创:177篇
    • 转载:26篇
    • 译文:13篇
    • 评论:17条
    最新评论