功能

完全隐藏了SQL,使用面向对象的方式查询,简称QBC/QBE。

声明

1
Criteria criteria = session.createCriteria(POJO类名);  //from

常用方法

常用方法 说明 等价SQL
session.createCriteria(POJO类名); 选择表 from
criteria.createCriteria(“POJO类名”); 选择其他表 from
setProjection(Projection) 选择一个统计列 select
setProjection(ProjectionList) 选择多个列 select
setProjection(Property) 选择一个列 select
setProjection(PropertyProjection) 分组 group by
add(Criterion) 添加一个查询条件 where
addOrder(Order) 添加一个排序条件 order by
createAlias() 创建关联查询 join
createCriteria(String) 关联条件 on
setFirstResult(int) 从第几条开始返回 limit第一个参数
setMaxResults(int) 返回几条数据 limit第二个参数

Projection

投影操作,包含统计函数

以下为Projections的常用静态方法(Projections包含静态方法,返回Projection对象)

常用方法 说明
avg(String) 该列平均值
count(String) 该列行数
countDistinct(String) 该列去重后行数
distinct(Projection) 去重
max(String) 该列最大值
min(String) 该列最小值
rowCount() 结果行数
sum(String) 该列求和
projectionList() 创建Projection列表

ProjectionList

通过Projection.projectionList()静态方法

Property

表示一列

1
Property.forName(String columnName)

PropertyProjection

以改列分组

1
Projections.groupProperty(String columnName);

Order

以该字段为序排序

以下为静态方法

常用方法 说明
asc(String) 增序
desc(String) 降序
ignoreCase() 忽略大小写

Criterion

Criterion表示查询条件,来自Restrictions类的静态方法

Restrictions类的常用方法

常用方法 说明 描述
eq(String, Object) 使字段名等于值 string = object
ne(String, Object) string != object
allEq(Map) 多个=条件 key1=value1 and key2=value2 and …
gt(String, Object) >
ge(String, Object >=
lt(String, Object) <
le(String, Object) <=
between(String, Object, Object 使字段名在两个值之间 string between object1 and object2
in(String, Collection) in(value1, value2, …)
like(String, Object) 支持通配符 like(“a%”)
ilike(String, Object) like不区分大小写

DetachedCriteria

Criteria来自session,脱离session后即失效。

DetachedCriteria实现在session外部创建条件

声明

1
DetachedCriteria d = DetachedCriteria.forClass(POJO类名);

执行

需将DetachedCriteria转换为Criteria后再执行

1
Criteria c = d.getExecutableCriteria(session);

执行查询

1
List<T> criteria.list();