DetechedCriteria与Criteria

简介

Criteria接口和DetechedCriteria类都继承了CriteriaSpecification接口,都相当于Hibernate查询时的一个容器,用以装条件的。

Criteria的实现类:CriteriaImpl, CriteriaImpl.Subcriteria。

他们的区别主要是创建形式不一样:

criteria是在线的,由session创建。

DetechedCriteria是离线的,Spring框架提供了HibernateTemplate().findByCriteria(detachedCriteria)方法来使用DetechedCriteria作为查询的容器。

DetechedCriteria提供两个静态方法:

                        DetachedCriteria.forClass(Class clazz);
			DetachedCriteria.forEntityName(String entityName);

Criteria和DetechedCriteria都有add(Criterion criterion)方法和setProjection(Projection projection)方法来添加查询查询条件、addOrder(Order order)方法添加排序等。

其中:

Criterion接口作为Criteria的查询条件,主要的实现类有:Junction(包括Disjuction和Conjunction)、Example、SimpleExpression。其中Junction和SimpleExpression实例由Restrictions工具类创建的,Example提供静态方法创建实例。

Projection接口主要是进行报表查询,也可以实现分组,主要的实现类有:SimpleProjection 、 ProjectionList 和、Property

。同样地SimpleProjection 和ProjectionList 实例由Projections工具类创建,Property是对某个字段的设置查询条件的。

Criteria

createAlias(java.lang.String associationPath, java.lang.String alias, JoinType joinType)使用指定的连接类型加入关联,为连接的关联分配一个别名(JoinType 可不写)
createCriteria(java.lang.String associationPath, java.lang.String alias, JoinType joinType)创建一个新的Criteria,在相关的实体上“扎根”,分配给定的别名并使用指定的联接类型(JoinType 可不写)。

假设情形:

class Project{
   public Job Job;
}

class Job{
   public Name;
}

如果需要搜索Job的名称为“sumthing”的所有项目

ICriteria criteriacrit = session
  .CreateCriteria(typeof (Project))
  .CreateCriteria("Job", "job")
  .Add(Restrictions.Eq("job.Name", "sumthing"));

ICriteria aliascrit = session
  .CreateCriteria(typeof (Project))
  .CreateAlias("Job", "job")
  .Add(Restrictions.Eq("job.Name", "sumthing"));

Restrictions

and(Criterion lhs, Criterion rhs)符合两个表达式的组合

conjunction(Criterion... conditions)将表达式组合在一起(A和B和C ...)  相当于and

or(Criterion lhs, Criterion rhs)两个表达式符合其中一个即可

disjunction(Criterion... conditions)将表达式组合在一个单独的析取(A或B或C ...)中。相当于or

eqOrIsNull(java.lang.String propertyName, java.lang.Object value)对指定的属性应用“相等”约束。 和eq(相等)一样

eqProperty(java.lang.String propertyName, java.lang.String otherPropertyName)同上

ge(java.lang.String propertyName, java.lang.Object value)对指定的属性应用“大于或等于”约束;gt为大于,le为小于等于,lt小于,ne不等于

geProperty(java.lang.String propertyName, java.lang.String otherPropertyName)对两个属性之间应用“大于或等于”约束 

ilike(java.lang.String propertyName, java.lang.Object value)不区分大小写的“like”(自己写%)

in(java.lang.String propertyName, java.lang.Object... values)对命名属性应用“in”约束。(可以是集合或其他)

not(Criterion expression)返回表达式的否定

Projections

property(java.lang.String propertyName)属性值投影

count(java.lang.String propertyName)属性值计数投影(看有多少列数据)

countDistinct(java.lang.String propertyName)一个不同的属性值计数投影(多少列不同的数据)

projectionList()创建一个新的投影列表。

alias(Projection projection, java.lang.String alias)通过包装为投影分配别名

                        criteria.setProjection(Projections.alias(Projections.groupProperty("age"), "ageAlies"))
			.addOrder(Order.asc("ageAlies"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值