Hibernate的检索方式(二)【转】
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://aumy2008.blogbus.com/logs/13887948.html
二.设定查询条件
在where子句中给出的是对象的属性名,而不是字段名。
HQL和QBC支持的各种运算
运算类型 |
HQL运算符 |
QBC运算符 |
含义 |
比较运算 |
= |
Expression.eq() |
等于 |
<> |
Expression.not(Expression.eq()) |
不等于 | |
> |
Expression.gt() |
大于 | |
>= |
Expression.ge() |
大于等于 | |
< |
Expression.lt() |
小于 | |
<= |
Expression.le() |
小于等于 | |
is null |
Expression.isNull() |
等于空值 | |
is not null |
Expression.isNotNull() |
非空值 | |
范围运算 |
in (列表) |
Expression.in() |
等于列表中的某一个值 |
not in (列表) |
Expression.not(Expression.in()) |
不等于列表中的任意一个值 | |
between 值1 and 值2 |
Expression.between() |
大于等于值1并且小于等于值2 | |
not between 值1 and 值2 |
Expression.not(Expression.between()) |
小于值1或者大于值2 | |
字符串模式匹配 |
like |
Expression.like() |
字符串模式匹配 |
逻辑运算 |
and |
Expression.add()或者Expression.conjunction() |
逻辑与 |
or |
Expression.or()或者Expression.disjunction() |
逻辑或 | |
not |
Expression.not() |
逻辑非 |
(1)不区分大小写:HQL使用lower()或者 upper()来实现(如:”…lower(c.name)=’tom’”);
QBC使用.ignoreCase()来实现(如:Expression.eq(“”,””) .ignoreCase())。
注:在HQL中,可以调用SQL函数。lower()转小写,upper()转大写。
QBC不支持直接调用SQL函数。
(2)HQL查询支持数学运算表达式,而QBC不支持。
2、范围运算
HQL中的in示例: c.name in (‘aa’,’bb’);
QBC中的in示例: String[] names={‘aa’,’bb’}; Expression.in(‘name’,names); 。
3、字符串模式匹配
HQL和QBC通用:字符串模式中的通配符
通配符名称 |
通配符 |
作用 |
百分号 |
% |
匹配任意类型且任意长度(长度可以为0)的字符串,如果是中文,需要两个百分号,即“%%” |
下划线 |
_ |
匹配单个任意字符,常用来限制字符串表达式的长度 |
QBC:MatchMode类包含的各个静态常量实例
匹配模式 |
举例 |
MatchMode.START |
Expression.like(“name”,”y”, MatchMode.START) 姓名以y开头 |
MatchMode.END |
Expression.like(“name”,”y”, MatchMode. END) 姓名以y结尾 |
MatchMode.ANYWHERE |
Expression.like(“name”,”y”, MatchMode. ANYWHERE) 姓名中包含y |
MatchMode.EXACT |
Expression.like(“name”,”y”, MatchMode. EXACT) 精确匹配,姓名必须为y |
4、逻辑运算
待续!