上放置条件。
List results session.createCriteriaCat.class .add Example.createcat .createCriteriaquotmatequot .add Example.create cat.getMate .list org.hibernate.criterion.Projections是 Projection 的实例工厂。
我们通过调用 setProjection应用投影到一个查询。
List results session.createCriteriaCat.class .setProjection Projections.rowCount .add Restrictions.eqquotcolorquot Color.BLACK .list List results session.createCriteriaCat.class .setProjection Projections.projectionList .add Projections.rowCount .add Projections.avgquotweightquot .add Projections.maxquotweightquot .add Projections.groupPropertyquotcolorquot .list 在一个条件查询中没有必要显式的使用 quotgroup byquot 。
某些投影类型就是被定义为 分组投影,他们也出现在SQL的group by子句中。
你可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。
下面是两种不同的实现方式: List results session.createCriteriaCat.class .setProjection Projections.alias Projections.groupPropertyquotcolorquot quotcolrquot .addOrder Order.ascquotcolrquot .list List results session.createCriteriaCat.class .setProjection Projections.groupPropertyquotcolorquot.asquotcolrquot .addOrder Order.ascquotcolrquot .list alias和as方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。
简而言之,当你添加一个投影到一个投影列表中时 你可以为它指定一个别名: List results session.createCriteriaCat.class .setProjection Projections.projectionList .add Projections.rowCount quotcatCountByColorquot .add Projections.avgquotweightquot quotavgWeightquot .add Projections.maxquotweightquot quotmaxWeightquot .add Projections.groupPropertyquotcolorquot quotcolorquot .addOrder Order.descquotcatCountByColorquot .addOrder Order.descquotavgWeightquot .list List results session.createCriteriaDomestic.class quotcatquot .createAliasquotkittensquot quotkitquot .setProjection Projections.projectionList .add Projections.propertyquotcat.namequot quotcatNamequot .add Projections.propertyquotkit.namequot quotkitNamequot .addOrder Order.ascquotcatNamequot .addOrder Order.ascquotkitNamequot .list 你也可以使用Property.forName来表示投影: List results session.createCriteriaCat.class .setProjection Property.forNamequotnamequot .add Property.forNamequotcolorquot.eqColor.BLACK .list List results session.createCriteriaCat.class .setProjection Projections.projectionList .add Projections.rowCount.asquotcatCountByColorquot .add Property.forNamequotweightquot.avg.asquotavgWeightquot .add Property.forNamequotweightquot.max.asquotmaxWeightquot .add Property.forNamequotcolorquot.group.asquotcolorquot .addOrder Order.descquotcatCountByColorquot .addOrder Order.descquotavgWeightquot .list DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来执行它。
DetachedCriteria query DetachedCriteria.forClassCat.class .add Property.forNamequotsexquot.eqF Session session .... Transaction txn session.beginTransaction List results query.getExecutableCriteriasession.setMaxResults100.list txn.commit session.close DetachedCriteria也可以用以表示子查询。
条件实例包含子查询可以通过 Subqueries或者Property获得。
DetachedCriteria avgWeight DetachedCriteria.forClassCat.class .setProjection Property.forNamequotweightquot.avg session.createCriteriaCat.class .add Property.forNamequotweight.gtavgWeight .list DetachedCriteria weights DetachedCriteria.forClassCat.class .setProjection Property.forNamequotweightquot session.createCriteriaCat.class .add Subqueries.geAllquotweightquot weights .list 甚至相互关联的子查询也是有可能的: DetachedCriteria avgWeightForSex DetachedCriteria.forClassCat.class quotcat2quot .setProjection Property.forNamequotweightquot.avg .add Property.forNamequotcat2.sexquot.eqPropertyquotcat.sexquot session.createCriteriaCat.class quotcatquot .add Property.forNamequotweight.gtavgWeightForSex .list 最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。
现在对 Hibernate的Criteria 的用法进行总结: Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所 以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线 的,创建时无需 Session,DetachedCriteria 提供了 2 个静态方法 forClassClass 或 forEntityNameName 进行DetachedCriteria 实例的创建。
Spring 的框架提供了getHibernateTemplate .findByCriteriadetachedCriteria 方法可以很方便地根据DetachedCriteria 来返回查询结 果。
Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。
可以设 置 FetchMode 联合查询抓取的模式 ,设置排序方式。
对于 Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式)。
下面对 Criterion 和 Projection 进行详细说明。
Criterion 是 Criteria 的查询条件。
Criteria 提供了 addCriterion criterion 方法来 添加查询条件。
Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。
而 Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操 作符进行来联结查询条件集合。
Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态 方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件 (SimpleExpression 实例)。
除此之外, Restrictions 还提供了方法来创建 conjunction 和 disjunction 实例,通过往该实例的 addCriteria 方法来增加查询条件形成一个查询条件集合 。
至于 Example 的创建有所不同, Example 本身提供了一个静态方法 createObject entity ,即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。
然后可以设置一些 过滤条件: Example exampleUser Example.createu .ignoreCase // 忽略大小写 .enableLikeMatchMode.ANYWHERE // 对 String 类型的属性,无论在那里值在那里都匹配。
相当于 value Project 主要是让 Criteria 能够进行报表查询,并可以实现分组。
Project 主要有 SimpleProjection 、 ProjectionList 和 Property 三个实现。
其中 Simp
上一篇:
javaweb开发的通用功能实现源代码下载
下一篇:
行走梵净山之(三)一世一遇,即是懂得