`

hsql大全

 
阅读更多

HQL:Hibernate Query Language
HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。
HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按
如下步骤进行:
(1)获取Hibernate Session对象;
(2)编写HQL语句;
(3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象;
(4)如果HQL语句包含参数,调用Query的setXxx方法为参数赋值;
(5)调用Query对象的list等方法遍历查询结果。
查询示例:
public class HqlQuery
...{
    public static void main(String[] args) throws Exception ...{
        HqlQuery mgr = new HqlQuery();
        //调用查询方法
        mgr.findPersons();
        //调用第二个查询方法
        mgr.findPersonByHappenDate();
        HibernateUtil.sessionFactory.close();
    }
    //第一个查询方法
    private void findPersons() ...{
        //获得Hibernate Session
        Session sess = HibernateUtil.currentSession();
        //开始事务
        Transaction tx = sess.beginTransaction();
        //以HQL语句创建Query对象
        //执行setString方法为HQL语句的参数赋值
        //Query调用list方法访问查询的全部实例
        List p1 = sess.createQuery("from Person p where o.myEvents.title = :
            eventTitle").setString("eventTitle", "很普通事情").list();
        //遍历查询的全部结果
        for (Iterator pit = p1.iterator(); pit.haxNext(); )
        ...{
            Person p = (Person)pit.next();
            System.out.println(p.getName());
        }
        //提交事务
        tx.commit();
        HibernateUtil.closeSession();
    }
    //第二个查询方法
    private void findPersonByHappenDate() throws Exception ...{
        Session sess = HibernateUtil.currentSession();
        Transaction tx = sess.beginTransaction();
        //解析出Date对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date start = sdf.parse("2007-11-27");
        System.out.println("系统开始通过日期查找人" + start);
        //通过Session的createQuery方法创建Query对象
        //设置参数
        //返回结果集
        List pl = sess.createQuery(
            "from Person p where p.myEvents.happenDate between :firstDate
            and :endDate")
                        .setDate("firstDate", start)
                        .setDate("endDate", new Date())
                        .list();
        //遍历结果集
        for (Iterator pit = pl.iterator(); pit.hasNext(); )
        ...{
            Person p = (Person)pit.next();
            System.out.println(p.getName());
        }
        tx.commit();
        HibernateUtil.closeSession();
    }
}

$下面介绍HQL语句的语法
1.from子句
from Person
表明从Person持久化类中选出全部的实例。
推荐:from Person as p

2.select子句
select p.name from Person as p
select p.name.firstName from Person as p
select new list(p.name, p.address) from Person as p
select new ClassTest(p.name, p.address) from Person as p (有前提)
select p.name as personName from Person as p
select new map(p.name as personName) from Person as p (与new map()结合更普遍)

3.聚集函数
avg,count,max,min,sum
select count(*) from Person
select max(p.age) from Person as p
select p.name || "" || p.address from Person as p

4.多态查询
from Person as p
from java.lang.Object o
from Named as n

5.where子句
from Person where name like "tom%"
from Person as p where p.name like "tom%"
from Cat cat where cat.mate.name like "kit%"
    select * from cat_table as table1 cat_table as table2 where table1.mate =
    table2.id and table1.name like "kit%"
from Foo foo where foo.bar.baz.customer.address.city like "fuzhou%"
from Cat cat, Cat rival where cat.mate = rival.mate
select cat, mate
from Cat cat, Cat mate
where cat.mate = mate
from Cat as cat where cat.id = 123
from Cat as cat where cat.mate.id = 69
from Person as person
where person.id.country = ''AU''
    and person.id.medicareNumber = 123456
from Account as account
where account.owner.id.country = ''AU''
    and account.owner.id.medicareNumber = 123456
from Cat cat where cat.class = DomesticCat
from Account as a where a.person.name.firstName like "dd%" // 正确
from Account as a where a.person.name like "dd%" // 错误

6.表达式
from DomesticCat cat where cat.name between ''A'' and ''B''
from DomesticCat cat where cat.name in (''Foo'', ''Bar'', ''Baz'')
from DomesticCat cat where cat.name not between ''A'' and ''B''
from DomesticCat cat where cat.name not in (''Foo'', ''Bar'', ''Baz'')
from DomesticCat cat where cat.name is null
from Person as p where p.address is not null
<property name="hibernate.query.substitutions">true 1, false 0</property>
from Cat cat where cat.alive = true
from Cat cat where cat.kittens.size > 0
from Cat cat where size(cat.kittens) > 0
from Calendar cal where maxelement(cal.holidays) > current date
from Order order where maxindex(order.items) > 100
from Order order where minelement(order.items) > 10000
//操作集合元素
select mother from Cat as mother, Cat as kit
where kit in elements(foo.kittens)
//p的name属性等于集合中某个元素的name属性
select p from NameList list, Person p
where p.name = some elements(list.names)
//操作集合元素
from Cat cat where exists elements(cat.kittens)
from Player p where 3 > all elements(p.scores)
from Show show where ''fizard'' in indices(show.acts)
//items是有序集合属性,items[0]代表第一个元素
from Order order where order.items[0].id = 1234
//holidays是map集合属性,holidays[national day]是代表其中第一个元素
select person from Person person, Calendar calendar
where calendar.holidays[''national day''] = person.birthDay
    and person.nationality.calendar = calendar
//下面同时使用list集合和map集合属性
select item from Item item, Order order
where order.items[order.deliveredItemIndices[0]] = item and order.id = 11
select item from Item item, Order order
where order.items[maxindex(order.items)] = item and order.id = 11

select item from Item item, Order order
where order.items[size(order.items) - 1] = item

select cust
from Product prod,
    Store store
    inner join store.customers cust
where prod.name = ''widget''
    and store.location.name in [''Melbourne'', ''Sydney'']
    and prod = all elements(cust.currentOrder.lineItems)

SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order
FROM customers cust,
    stores store,
    locations loc,
    store_customers sc,
    product prod
WHERE prod.name = ''widget''
    AND store.loc_id = loc.id
    AND loc.name IN (''Melbourne'', ''Sydney'')
    AND sc.store_id = store.id
    AND sc.cust_id = cust.id
    AND prod.id = ALL(
        SELECT item.prod_id
        FROM line_items item, orders o
        WHERE item.order_id = o.id
            AND cust.current_order = o.id
    )

7.order by子句
from Person as p
order by p.name, p.age
from Person as p
order by p.name asc, p.age desc

8.group by子句
select cat.color, sum(cat.weight), count(cat)
from Cat cat
group by cat.color
//select后出现的id处出现在group by之后,而name属性则出现在聚集函数中
select foo.id, avg(name), max(name)
from Foo foo join foo.names name
group by foo.id

select cat.color, sum(cat.weight), count(cat)
from Cat cat
group by cat.color
having cat.color in (eg.Color.TABBY, eg.Color.BLACK)

select cat
from Cat cat
join cat.kittens kitten
group by cat
having avg(kitten.weight) > 100
order by count(kitten) asc, sum(kitten.weight) desc

9.子查询
from Cat as fatcat
where fatcat.weight > (select avg(cat.weight) from DomesticCat cat)

from Cat as cat
where not (cat.name, cat.color) in (
    select cat.name, cat.color from DomesticCat cat
)

10.fetch关键字
from Person as p join p.scores

from Document fetch all properties order by name
from Document doc fetch all properties where lower(doc.name) like ''%cat%''

11.命名查询
<!--定义命名查询-->
<query name="myNamedQuery">
    <!--此处确定命名查询的HQL语句-->
    from Person as p where p.age > ?
</query>

调用命名查询的示例代码如下:
private void findByNamedQuery() throws Exception ...{
    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction();
    System.out.println("执行命名查询");
    //调用命名查询
    List pl = sess.getNamedQuery("myNamedQuery")
                                    //为参数赋值
                                    .setInteger(0, 20)
                                    //返回全部结果
                                    .list();
    //遍历结果集
    for (Integer pit = pl.iterator(); pit.hasNext(); )
    ...{
        Person p = (Person)pit.next();
        System.out.println(p.getName());
    }
    tx.commit();
    HibernateUtil.closeSession();
}

分享到:
评论

相关推荐

    hsql查询语法

    HSQL查询语法 HSQL(Hibernate Query Language)是一种强大且灵活的查询语言,用于查询Hibernate应用程序中的数据。下面将对HSQL的基本语法和使用方法进行详细介绍。 1. 大小写敏感性问题 HSQL查询语句对大小写并...

    hsql可视化工具

    HSQL(HyperSQL)是一种轻量级、高性能的关系型数据库管理系统,它支持SQL标准并提供了多种运行模式,包括单用户模式、嵌入式模式和服务器模式。HSQL因其小巧、快速和易于使用而受到开发者们的青睐,尤其适用于开发...

    hsql数据库详细教程

    【HSQL数据库详解】 HSQL(HyperSQL)数据库是一款轻量级、开源的Java数据库管理系统,适用于各种项目,尤其在Java开发环境中广受欢迎。它的特点是体积小巧,仅一个jar文件即可包含所有必需组件,如数据库引擎、...

    收集的全部HSQL DataBase资料(HSQL DataBase-关于Java 的纯数据库)

    HSQL Database,全称为HyperSQL Database,是一款轻量级、高性能、开源的SQL关系型数据库管理系统,特别适合于Java应用程序。这款数据库系统以其简洁的API、快速的性能和全面的SQL支持,在Java开发环境中得到了广泛...

    如何使用hsql数据库

    如何使用hsql数据库

    HSQL安装部署使用手册

    《HSQL数据库安装部署使用详解》 HSQL(HyperSQL)是一种轻量级、高性能的关系型数据库管理系统,常用于开发测试环境或者嵌入式应用。本文将详细介绍HSQL的安装、部署以及使用过程,帮助您顺利搭建并操作HSQL数据库...

    有关hsql处理文本数据库的笔记

    HSQL(HyperSQL)是一个开源的关系型数据库管理系统,它支持内存模式和文件模式,能够处理文本格式的数据,如CSV(逗号分隔值)文件。在本篇笔记中,我们将探讨如何使用HSQL处理文本数据库,特别是如何导入和操作CSV...

    HSQL源代码

    《深入理解HSQL源代码与Eclipse环境搭建》 HSQLDB,全称为HyperSQL Database,是一款开源的关系型数据库管理系统,特别适用于Java应用程序。它的源代码开放,使得开发者能够深入理解其内部工作原理,进行定制化开发...

    Spring数据库访问(HSQL)(三)

    在本篇博文中,我们将深入探讨Spring框架在数据库访问方面的应用,特别关注使用HSQL内存数据库的实践。HSQL数据库是一种轻量级的关系型数据库管理系统,适用于开发测试和快速原型设计,因为它不需要独立服务器进程,...

    Spring数据库访问(HSQL)(四)

    在本篇博文中,我们将深入探讨Spring框架在数据库访问方面的应用,特别关注使用HSQL内存数据库的实践。Spring是Java领域最广泛使用的轻量级框架之一,它为开发者提供了全面的事务管理、数据访问集成以及IoC...

    hsql-file数据库的java简单调用实现

    标题中的“hsql-file数据库的java简单调用实现”指的是使用Java编程语言与HSQLDB(HyperSQL数据库)进行交互,特别是在文件模式下操作数据库。HSQLDB是一种轻量级、开源的关系型数据库管理系统,它支持内存模式和...

    hsql数据库,体积最小的数据库,使用最方便的数据库

    hsql数据库,体积最小的数据库,使用最方便的数据库,不用安装,解压就能用,携带方便

    Hsql的完整demo

    首先说一下hsqldb几个优点 &lt;br&gt; 1. 轻巧,只有600多K,运行速度非常快。结合Hibernate数据库无关的特性,非常适合在项目开发的时候使用。 2. 作为单元测试数据库。单元测试的时候,启动HSQLDB的file模式,...

    HSQL数据库2.2.5

    《HSQL数据库2.2.5:轻量级数据库解决方案详解》 HSQL数据库,全称为HyperSQL Database,是一款开源的、轻量级的Java数据库管理系统,尤其适用于内存模式、单机模式以及分布式多机环境。HSQLDB 2.2.5是其一个重要的...

    hsql及其官方说明书

    **HSQldb详解** HSQldb,全称为HyperSQL Database,是一个完全用Java语言编写的开源关系型数据库管理系统。它的设计目标是提供一个轻量级、高性能、易于使用且完全符合SQL标准的数据库解决方案。...

    用maven构建SpringMVC+JPA+Hibernate+Hsql+jetty的web项目

    【标题】"用maven构建SpringMVC+JPA+Hibernate+Hsql+jetty的web项目"涉及了多个核心的Java Web开发技术,这里我们将深入探讨这些技术以及如何将它们整合到一起。 1. Maven:Maven是Apache的一个开源项目,它是一个...

    HSQL JDBC操作

    标题中的“HSQL JDBC操作”指的是使用Java的JDBC(Java Database Connectivity)接口与HSQLDB(HyperSQL数据库)进行交互。HSQLDB是一个轻量级、开源的关系型数据库管理系统,广泛用于测试和开发环境中,因为它启动...

Global site tag (gtag.js) - Google Analytics