开发者社区> 问答> 正文

MyBatis模糊查询怎么写呀? 热:报错

刚学mybatis,看以前的ibatis的模糊查询是:

<select id="findByName" parameterClass="String" resultClass="Student">
          select * from Student where sname like '%$sname$%'
      </select>

现在想改成用mybatis的:

改成这样:select * from Student where sname like '%${sname}%'

和select * from Student where sname like '%#{sname}%',都不行

有谁用mybatis,告诉下,thank you......

展开
收起
kun坤 2020-06-09 22:17:55 407 0
1 条回答
写回答
取消 提交回答
  • 我最近也遇到了这个问题,研究了一下现在是这样实现的:

    <select id="findByName" parameterType="String" resultType="Student">

        select * from Student where sname like CONCAT('%',#{sname},'%')

    </select>######

    mybatis 跟 iBatis 都没有区别哦,只是改了个名字而已

    ######

    不要'%%',直接#{sname}

    ######

    说了是模糊查询呀,就是查找:  %sname%   %表示0个或多个其它字符。#{sname} 不能用;

    例如查表学生中有‘李’字的所有所生: select sname,sid from student where sname like '%李%'

    iBatis 时是:select sname,sid from student where sname like '%$sname$%';

    myBatis时,再这么写就报错:

    楼上那么写,只能查找固定姓名的学生。

    ######

    引用来自#4楼“小翔”的帖子

    说了是模糊查询呀,就是查找:  %sname%   %表示0个或多个其它字符。#{sname} 不能用;

    例如查表学生中有‘李’字的所有所生: select sname,sid from student where sname like '%李%'

    iBatis 时是:select sname,sid from student where sname like '%$sname$%';

    myBatis时,再这么写就报错:

    楼上那么写,只能查找固定姓名的学生。

    你可以在传入数据的时候增加%,例如传入的是oschina,变成 %oschina% 传给 MyBatis :)

    当然,这是我不懂 MyBatis 的说法,MyBatis 应该还是支持这种模糊查询的

    ######

    太扯了 MyBatis 的 UserGuide 文档中居然没有提及这个问题。

    ######

    这样写:

    <select id="findByName" parameterType="String" resultType="Student">
            select * from Student where sname like #{sname}
          </select>

    运行时:List<Student> stus=ssi.findByName("%xi%");
            System.out.println(stus.size());

    这样能查出来。

    mybatis把以前的#id#变成#{id}了;$csd$就不知道变成什么了,

    总觉查东西时传个 %xi% 很不爽,

    ######

    写法:<like>#{sname}</like>

    请看这里:http://code.google.com/p/mybatis/issues/detail?id=85

    ######

    用户文档就写了一丁点,丫根就没提。

    ######

    <select id="findByName" parameterType="String" resultType="Student">
            select * from Student where sname like #{sname}
          </select>

    List<Student> stus=ssi.findByName("x");
            System.out.println(stus.size());

    查询得0,改成其它都会报错,没有<like>标记吧

    2020-06-09 22:18:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载