`
wangtong40
  • 浏览: 253014 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate QBC语言

    博客分类:
  • ORM
阅读更多

节 8.01    基本查询
以下是HQL/QBC/Native SQL三种查询策略
HQL策略:

session.createQuery("FROM Category c where c.name like 'Laptop%'");
 


QBC策略:

session.createCriteria(Category.class).add(Restrictions.like("name", "Laptop%"));
 


Native SQL策略

session.createSQLQuery("select {c.*} from CATEGORY {c} where NAME like 'Laptop%'").
addEntity("c",Category.class);
 


节 8.02    分页查询

Criteria criteria = session.createCriteria(Category.class)
.add(Restrictions.like("name", "Laptop%"));
criteria.addOrder(Order.asc("name"));
criteria.setFirstResult(0);//初始行数
criteria.setMaxResults(20);//每页显示行数
 


节 8.03    数据过滤
方法                      说明   
Restrictions.eq         =  
Restrictions.allEq      利用Map来进行多个等于的限制   
Restrictions.gt         >   
Restrictions.ge         >=   
Restrictions.lt         < 
Restrictions.le         <=   
Restrictions.between    BETWEEN  
Restrictions.like       LIKE  
Restrictions.in         in  
Restrictions.and        and  
Restrictions.or         or  
Restrictions.sqlRestriction     用SQL限定查询
(a)    应用限制

Criterion emailEq = Restrictions.eq("email", "w@163.com");
Criteria criteria = session.createCriteria(User.class);
criteria.add(emailEq);
User user = (User)criteria.uniqueResult();
 


(b)    比较表达式

Restrictions.between("amount", new BigDecimal(100), new BigDecimal(200));
Restrictions.gt("amount", new BigDecimal(100));
Restrictions.in("email", emails);//注:emails为集合
Restrictions.isNull("email");
Restrictions.isNotNull("email");
Restrictions.isEmpty("bids");
Restrictions.sizeGe("bids", 3);//bids属性大小
 


(c)    字符串匹配

Restrictions.like("email", "G%");
Restrictions.like("email", "G%",MatchMode.START);
注:MatchMode分为START,END,ANYWHERE,EXACT四种模式
Restrictions.like("email", "G%").ignoreCase();
 


(d)    组合表达式和逻辑操作符

Restrictions.or(
                Restrictions.and(
                        Restrictions.like("firstname", "G%"),
                        Restrictions.like("lastname", "K%")),
                        Restrictions.in("email",emails));
 


(e)    SQL表达式

Restrictions.sqlRestriction("{alias}.name='tie' and {alias}.addr='dalian'");
Restrictions.sqlRestriction("{alias}.name=?",  "tie", Hibernate.STRING);//姓名为tie的对象
Restrictions.sqlRestriction("length({alias}.PASSWORD) < ?",5,Hibernate.INTEGER);
//密码小于5个字符对象
Restrictions.sqlRestriction("'100' >all( select b.AMOUNT FROM BID b " +
                " WHERE b.ITEM_ID = {alias}.ITEM_ID)");//返回出价不大于100
 



(f)    子查询

节 8.04    表关联
(a)    隐式关联
隐式关联有两种方法:
1、    Criteria接口的createCriteria()方法:

session.createCriteria(Item.class)
.add(Restrictions.like("description", "Foo",MatchMode.ANYWHERE))
.createCriteria("bids")
.add(Restrictions.gt("amount",new BigDecimal(100)));

session.createCriteria(Item.class)
            .createCriteria("seller")
            .add(Restrictions.like("email", "%@"));
 


2、    分配别名:

session.createCriteria(Item.class)
            .createAlias("bids","b")
            .add(Restrictions.like("description", "%Foo%"))
            .add(Restrictions.gt("b.amount", new BigDecimal(100)));

session.createCriteria(Item.class)
            .createAlias("seller", "s")
            .add(Restrictions.like("s.email","%@"));
 


(b)    抓取关联

session.createCriteria(Item.class)
            .setFetchMode("bids",FetchMode.JOIN)
            .add(Restrictions.like("description", "%Foo%"))
 




节 8.05    投影/报表查询
(a)    简单投影

session.createCriteria(Item.class)
        .add(Restrictions.gt("endDate", new Date()))
        .setProjection(Projections.id());//返回单一属性

session.createCriteria(Item.class).setProjection(
Projections.projectionList().add(Projections.id()).
add(Projections.property("description")));//返回一个Object[]
 



(b)    统计分组

session.createCriteria(Item.class)
.setProjection(Projections.rowCount());

session.createCriteria(Item.class)
            .setProjection(Projections.projectionList()
            .add(Projections.rowCount())
            .add(Projections.sum("sales"))
            .add(Projections.avg("score"))
            );

    session.createCriteria(Bid.class)
        .createAlias("bidder", "u")
        .setProjection(Projections.projectionList()
                .add(Property.forName("u.id").group())
                .add(Property.forName("u.username").group())
                .add(Property.forName("id").count())
                .add(Property.forName("amount").avg())
            );
 




(c)    SQL投影

String sqlFragment = "(select count(*) from Item i where i.item_id = item_id) "
                + " as numofitems";
        session.createCriteria(Bid.class).createAlias("bidder", "u")
                .setProjection(
                        Projections.projectionList().add(
                                Projections.groupProperty("u.id")).add(
                                Projections.groupProperty("u.username")).add(
                                Projections.count("id")).add(
                                Projections.avg("amount")).add(
                                Projections.sqlProjection(sqlFragment,
                                        new String[] { "numofitems" },
                                        new Type[] { Hibernate.LONG }))

                );
 

 

12
1
分享到:
评论

相关推荐

    Java_Hibernate QBC条件查询对比

    本篇文章将深入探讨Hibernate中的QBC(Query By Example)条件查询与传统的HQL(Hibernate Query Language)查询的对比,帮助开发者更好地理解和选择适合的查询方式。 QBC(Query By Example)是Hibernate提供的一...

    Hibernate-HQL-QBC-QBE

    2. HQL(Hibernate Query Language):HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是针对对象而不是表格进行操作的。HQL允许开发者以类和对象的方式编写查询,支持复杂的查询结构,如连接、子查询、...

    Hibernate查询语言.doc

    本文主要探讨Hibernate中的查询语言,包括面向对象的查询语言HQL,QueryBy Criteria (QBC),Query By Example (QBE),以及原生SQL的使用。 1. **大小写敏感性** HQL查询语句对Java类和属性名称的大小写敏感,而...

    Hibernate实例开发 HQL 与 QBC 查询

    首先,HQL是Hibernate专门设计的一种面向对象的查询语言,它的语法类似于SQL,但更注重对象而非表。例如,如果我们有一个`User`实体,我们可以使用HQL来获取所有用户: ```java Session session = sessionFactory....

    精通hibernate HQL语言

    在深入探讨Hibernate的HQL语言之前,我们先理解一下什么是HQL。HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是...

    QBC查询的别名方的

    - **HQL与HBM的关系**:HQL是一种面向对象的查询语言,用于查询和操作Hibernate管理的对象。它依赖于HBM映射文件定义的对象模型,因此,正确配置HBM文件对于HQL的正常使用至关重要。 #### 2. Projection在查询中的...

    HQL与QBC的查询条件.doc

    HQL(Hibernate Query Language)和QBC(Query By Example)是Hibernate提供的两种主要的查询方式,它们提供了灵活且强大的查询能力。下面将详细阐述这两种查询方式以及它们的查询条件。 **HQL(Hibernate Query ...

    hibernate 数据库操作方法

    HQL是Hibernate特有的面向对象的查询语言,其语法类似于SQL,但操作的是对象和集合。它可以更自然地映射到Java对象。例如,查找所有年龄大于30岁的用户: ```java String hql = "FROM User WHERE age &gt; :age"; ...

    hibernate中文帮助文档

    6. **HQL与QBC**: Hibernate查询语言(HQL)是面向对象的查询语言,类似SQL但更接近Java。另外,Query By Criteria(QBC)提供了一种基于对象的查询方式,可以动态构建查询条件。 7. **级联操作与缓存**: Hibernate...

    hibernate的jar包

    - 支持多种查询语言:HQL(Hibernate Query Language)是面向对象的查询语言,类似SQL;QBC(Query By Criteria)提供基于Java对象的查询方式。 - 第三方缓存集成:如支持 Ehcache,用于提高数据访问速度和并发...

    Hibernate.3.6.10帮助文档

    5. **查询语言HQL**:Hibernate Query Language,是Hibernate提供的一种面向对象的查询语言,类似于SQL,但更贴近于Java对象。 6. ** Criteria查询**:一种动态构建查询的方法,允许在运行时构建查询,提供了更灵活...

    Hibernate 进阶教程

    7. **HQL和QBC**:Hibernate查询语言(HQL)是面向对象的查询语言,与SQL类似但更贴近Java编程。Query By Criteria API提供了一种基于对象的方式来构建查询,两者的使用和优化技巧。 8. **缓存机制**:探讨...

    Hibernate必备资源包

    5. **查询语言**: HQL(Hibernate Query Language)和QBC(Query By Criteria)是Hibernate提供的两种面向对象的查询语言,可以替代SQL进行数据库查询。 6. ** Criteria查询**: 一种更强大的查询方式,允许动态构建...

    hibernate映射和查询

    Hibernate 提供了多种查询方式,包括 HQL(Hibernate Query Language)、QBC(Query By Criteria)和 JPA(Java Persistence API)的 Criteria API。这些查询语言提供了面向对象的方式来检索数据,比传统的 SQL 更加...

    hibernate教程hibernate教程

    本教程主要涵盖了Hibernate的核心概念和使用技巧,包括缓存机制、对象状态管理、数据检索策略以及查询语言。 **一、Hibernate缓存** Hibernate的缓存分为一级缓存和二级缓存。一级缓存是每个Session内部的对象缓存...

    Hibernate的查询方式

    本文将深入探讨Hibernate的查询方式,特别聚焦于HQL(Hibernate Query Language)查询方式以及QBC(Query By Criteria)查询方式,旨在帮助读者全面理解并掌握这些核心功能。 #### HQL查询方式:面向对象的查询语言...

    hibernate中文开发手册

    5. **HQL与Criteria查询**:Hibernate提供了自己的查询语言HQL(Hibernate Query Language),以及Criteria API,这两者都允许开发者以面向对象的方式执行数据库查询。手册将展示如何编写HQL语句,执行复杂的查询,...

    hibernate xml

    6. **HQL和QBC**:虽然主要讨论的是XML配置,但值得一提的是,Hibernate还提供了HQL(Hibernate Query Language)和QBC(Query By Criteria)两种查询方式,它们是面向对象的查询语言,与SQL类似,但更接近Java编程...

    深入浅出Hibernate

    5. HQL和QBC:Hibernate查询语言(HQL)和Query By Criteria(QBC)是Hibernate提供的两种高级查询方式,它们允许开发者以面向对象的方式编写查询,避免了直接使用SQL的复杂性。 6. 关联映射:详细阐述一对一、一对...

    常见hibernate面试题.doc

    - **HQL (Hibernate Query Language)**:HQL是一种面向对象的查询语言,它提供了一种灵活且强大的查询方式。HQL语法类似于SQL,但它是基于对象模型的,可以查询、更新或删除对象。 - **QBC (Query By Criteria)**:...

Global site tag (gtag.js) - Google Analytics