`
234390216
  • 浏览: 10194094 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460821
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771877
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395481
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393917
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678253
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529320
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178774
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:462010
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150169
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66890
社区版块
存档分类
最新评论

mybatis模糊查询

阅读更多

今天弄了一下mybatis,发现网上关于mybatis模糊查询的很多人不知道,好像也没人说,所以我就把我关于mybatis模糊查询的用法写出来供有需要的人参考一下,希望对有需要的人能有所帮助!该查询是基于mysql数据库进行的,不同的数据库这个语法可能会有不同,仅作参考。

<select id="selectByName" parameterType="String" resultType="Student">
  select * from Student s where s.name like "%"#{name}"%";
 </select>

 

这里我再补充一下,如果你的student.xml文件里面针对这个查询的配置只用到了name的话,那么你直接给它传一个String类型的name是没有问题的,如果有多个条件的话你也可以给它传多个参数,当然你也可以给它传一个对象,而该对象所对应的属性就是你所要查的属性,像上面那样你就可以在你的程序里面这样写

@Override
	public List<Student> findAllByName(String name) {
		Student student = new Student();
		student.setName(name);
		List<Student> studentList = session.selectList("selectByName", student);
		return studentList;
	}

 

补充:最近用3.0.6版本测试了下,前面的用法还是可以的

 

 

 

我的另一篇讲Mybatis基础的博客http://haohaoxuexi.iteye.com/blog/1333271中也有关于模糊查询的多种用法,包括使用Mapper的、使用session的和Mapper中使用注解映射的

 

 

新版本的mybatis可以用如下方式实现模糊查询(基于Mybatis3.3.1验证)。

    <select id="fuzzyQuery" resultType="Blog" parameterType="java.lang.String">  
    	<!-- bind标签用于创建新的变量 -->
		<bind name="titleLike" value="'%'+_parameter+'%'"/>
        select * from t_blog where title like #{titleLike}  
    </select>

 关于bind标签的解释可参考http://elim.iteye.com/blog/1338557

 

 

 

 

分享到:
评论
24 楼 lcwen_13 2015-10-02  
感觉这篇文章是在误导人
23 楼 lwl550660646 2014-04-26  
MyBatis本来是用来支持多数据库的。不同的数据库,SQL语法肯定有差异。要不用MyBatis干嘛?
22 楼 dai_zhuo 2013-09-25  
columnName like concat('%',concat(#{columnName},'%'))
我每次这样写oracle mysql都是可以的。
21 楼 alongyijue 2013-09-13  
234390216 写道
xinming_me 写道
楼主,我用的是mybaits3.0.5 你的代码跑不通,报语法错误!

后来我用的这个就可以了:
SID in (select ID from T_USER where EMAIL like '%'||#{supplierID}||'%')


版本问题吧,你说的这个版本我没有测试过,我是以前用的3.0.2版本

这个应该是数据库的原因吧,我使用oracle数据库按照楼主的写法老是报“命令未正常结束”的错误。换成'%'||#{supplierID}||'%')
果断就行了
20 楼 sdm_seven 2013-06-08  
    <![CDATA[ bylaw_name like '%$bylaw_name$%' ]]>
19 楼 234390216 2013-06-05  
hellostory 写道
timer_yin 写道
我用的Mybatis 3.1 搜了挺多模糊查询怎么做都不对,原来是应该用双引号,楼主的才是对的


你这话就不对了,楼主的那种方法明显就是针对MySQL,要不你改为SQL Server试试,不报错才怪!



.

确实,我当初就是用Mysql测试的,可以通过,其他数据库没试过
18 楼 hellostory 2013-06-05  
timer_yin 写道
我用的Mybatis 3.1 搜了挺多模糊查询怎么做都不对,原来是应该用双引号,楼主的才是对的


你这话就不对了,楼主的那种方法明显就是针对MySQL,要不你改为SQL Server试试,不报错才怪!



.
17 楼 timer_yin 2012-02-27  
我用的Mybatis 3.1 搜了挺多模糊查询怎么做都不对,原来是应该用双引号,楼主的才是对的
16 楼 hellostory 2011-11-21  
List<Student> studentList = session.selectList("selectByName", student);  

为什么不直接用Mybatis的Mapper接口类,而用sqlSession,这样感觉还不如用ibatis2
15 楼 roiz 2011-11-13  
xinming_me 写道
楼主,我用的是mybaits3.0.5 你的代码跑不通,报语法错误!

后来我用的这个就可以了:
SID in (select ID from T_USER where EMAIL like '%'||#{supplierID}||'%')


这种方式通过
14 楼 234390216 2011-07-29  
xinming_me 写道
楼主,我用的是mybaits3.0.5 你的代码跑不通,报语法错误!

后来我用的这个就可以了:
SID in (select ID from T_USER where EMAIL like '%'||#{supplierID}||'%')


版本问题吧,你说的这个版本我没有测试过,我是以前用的3.0.2版本
13 楼 xinming_me 2011-07-29  
楼主,我用的是mybaits3.0.5 你的代码跑不通,报语法错误!

后来我用的这个就可以了:
SID in (select ID from T_USER where EMAIL like '%'||#{supplierID}||'%')
12 楼 softkid 2011-01-08  
mybatis 3.02经过哥的测试,楼主的可以
11 楼 234390216 2010-11-27  
java378656992 写道
不可能的

'%'||#{title}||'%'  这样还差不多!

sql里头不能用"" 双引号的

你先试一下吧,如果还不行的话,就把你的代码贴给我看一下吧
10 楼 java378656992 2010-11-27  
不可能的

'%'||#{title}||'%'  这样还差不多!

sql里头不能用"" 双引号的
9 楼 234390216 2010-11-27  
如果说还有按照我说的做的有报错的,就请把你们的代码贴出来,我看一下,谢谢!
8 楼 234390216 2010-11-27  
java378656992 写道
直接报错 ..  sql里头不会允许有 双引号的


这里传参数的时候可以是一个字符串,但是在内部必须是一个对象,类似于这样的:
@Override
	public List<Student> findAllByName(String name) {
		Student student = new Student();
		student.setName(name);
		List<Student> studentList = session.selectList("selectByName", student);
		return studentList;
	}
7 楼 234390216 2010-11-27  
java378656992 写道
直接报错 ..  sql里头不会允许有 双引号的

这个我是自己做过测试的,可以的,你看看你的代码是不是其他地方有问题呢
6 楼 java378656992 2010-11-26  
huangsky 写道
'%$value$%'
这样



有没有搞错,我们说的是mybatis3版本,没有$property$ 这种写法了
5 楼 java378656992 2010-11-26  
直接报错 ..  sql里头不会允许有 双引号的

相关推荐

Global site tag (gtag.js) - Google Analytics