MyBatis模糊查询怎么写呀?

小翔 发布于 2010/08/31 13:04
阅读 23K+
收藏 2

刚学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......

加载中
1
s
soraka
我最近也遇到了这个问题,研究了一下现在是这样实现的:

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

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

</select>
0
红薯
红薯

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

0
c
chenjia_theone

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

0
小翔
小翔

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

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

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

myBatis时,再这么写就报错:

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

0
红薯
红薯

引用来自#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 应该还是支持这种模糊查询的

0
红薯
红薯

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

0
小翔
小翔

这样写:

<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% 很不爽,

0
红薯
红薯

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

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

0
小翔
小翔

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

0
小翔
小翔

<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>标记吧

返回顶部
顶部