40
回答
MyBatis模糊查询怎么写呀?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

举报
小翔
发帖于7年前 40回/23K+阅
共有40个答案 最后回答: 2年前
我最近也遇到了这个问题,研究了一下现在是这样实现的:

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

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

</select>

说了是模糊查询呀,就是查找:  %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 应该还是支持这种模糊查询的

这样写:

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

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

顶部