zoukankan      html  css  js  c++  java
  • Hibernate查询语言

    1、查询语言

        Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。

        尽管你能直接使用本地的SQL语句,但还是建议尽可能的使用HQL语句,以避免数据库关于可移植性的麻烦,并且体现了Hibernate的SQL生成和缓存策略。

        在HQL中一些关键字比如select、from和where等,是不区分大小写的,但是一些属性比如表名和列名是区份大小写的。

    2、FROM语句

        如果你想要在存储中加载一个完整并持久的对象,你将使用FROM语句。以下是FROM语句的一些简单的语法:

    String hql="from Eployee";
    Query query=session.createQuery(hql);
    List results=query.list();

        如果需要在HQL中完全限定类名,只需要指定包和类名,如下:

    String hql="from com.hibernatebook.criteria.Employee";
    Query query=session.createQuery(hql);
    List results=query.list();

    3、AS语句

        在HQL中as语句能够用来给类分配别名,尤其是在长查询的情况下。例如,之前的例子,可以用如下方式展示:

    String hql="from Employee as E";
    Query query=session.createQuery(hql);
    List results=query.list();

        关键字as是可省略的并且也可以在类名后直接指定一个别名,如:String hql="from Employee E";

    4、select语句

        select语句比from语句提供了更多的对结果集的控制。如果只想得到对象的几个属性而不是整个对象,只需要使用select语句。下面是一个select语句的简单语法示例,这个例子是为了得到Employee对象的first_name字段:

    String hql="select E.firstName from Employee E";
    Query query=session.createQuery(hql);
    List results=query.list();

        值得注意的是Employee.firstName是Employee对象的属性,而不是一个Employee表的字段

    5、where语句

        若想要精确地从数据库存储中国返回特定对象,需要使用where语句。如下:

    String hql="from Employee E where E.id=10";
    Query query=session.createQuery(hql);
    List results=query.list();

    6、order by语句

        为了给HSQ查询结果进行排序,使用order by语句,可以利用任意一个属性给结果进行排序,包括升序或降序,如:

    String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.salary DESC"; 
    Query query = session.createQuery(hql);
    List results = query.list();

        如果你想要给多个属性进行排序,你只需要在 ORDER BY 语句后面添加你要进行排序的属性即可,并且用逗号进行分割:

    String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.firstName DESC, E.salary DESC ";

    7、group by语句

        该语句允许Hibernate将信息从数据库中提取出来,并且基于某种属性的值将信息进行编组,通常而言,该语句会使用得到的结果来包含一个聚合值。语法如下:

    String hql = "SELECT SUM(E.salary), E.firtName FROM Employee E GROUP BY E.firstName";

    8、使用命名参数

        Hibernate的HQL查询功能支持命名参数。这使得HQL查询功能既能接受来自用户的简单输入,又无需防御SQL注入攻击。语法:

    String hql = "FROM Employee E WHERE E.id = :employee_id";

    9、update语句

        HQL Hibernate3较HQL HIbernate2,新增了批量更新功能和选择性删除工作的功能。查询接口包含一个executeUpdate()方法,可以执行HQL的update或delete语句。

        update语句能够更新一个或多个对象的一个或多个属性。语法:

    String hql="update Eployee set salary=:salary where id:employee_id";
    Query query=session.createQuery(hql);
    query.setParameter("salary",1000);
    query.setParameter("employee_id",10);
    int result=query.executeUpdate();
    System.out.println("Rows affected:"+result);

    10、delete语句

        delete语句可以用来删除一个或多个对象。语法:

    String hql = "DELETE FROM Employee WHERE id = :employee_id";
    Query query = session.createQuery(hql);
    query.setParameter("employee_id", 10); int result = query.executeUpdate();
    System.out.println("Rows affected: " + result);

    11、insert语句

        HQL只有当记录从一个对象插入到另一个对象时才支持insert into语句。语法:

    String hql="insert into Employee(firstName,lastName,salary)"+
    "select firstName,lastName,salary from old_employee";
    Query query=session.createQuery(hql);
    int result=query.executeUpdate();
    System.out.println("Rows affected:"+result);

    12、聚合方法

        HQL类似于SQL,支持一系列的聚合方法。他们以同样的方式在HQL和SQL中工作,以下列出几种高可用的方法:

    方法 描述
    avg() 属性的平均值
    count() 属性在结果中出现的次数
    max() 属性值得最大值
    min() 属性值得最小值
    sum() 属性值的总和

        distinct关键字表示只计算行集中的唯一值:

    String hql = "SELECT count(distinct E.firstName) FROM Employee E";
    Query query = session.createQuery(hql);
    List results = query.list();

        使用分页查询两种方法:

    方法 描述
    Query setFirstResult(int startPosition) 该方法以一个整数表示结果中的第一行,从0开始
    Query setMaxResults(int maxResult) 这个方法告诉HIbernate来检索固定数量,即maxResults个对象

        使用以上两种方法,我们可以在我们的web或Swing应用程序中构造一个分页组件。下面是示例,可以扩展到每次取10行:

    String hql = "FROM Employee";
    Query query = session.createQuery(hql);
    query.setFirstResult(1);
    query.setMaxResults(10);
    List results = query.list();
  • 相关阅读:
    IDE-常用插件
    Go-竞态条件-锁
    Go-发送邮件
    复刻网络Yum源配置为本地Yum源使用
    测试
    九.查找算法
    九.多线程-PDF笔记
    八.设计模式
    八.排序算法:复杂度
    七.注解
  • 原文地址:https://www.cnblogs.com/xslzwm/p/9565727.html
Copyright © 2011-2022 走看看