Hibernate的HQL简介
来源:互联网 发布:淘宝注册商家有多少家 编辑:程序博客网 时间:2024/05/29 19:42
HQL(Hibernate Query Language)描写对象操作一种查询语言。Hibernate特有。
与SQL语法基本一致,不同的是HQL是面象对象的查询,查询的是对象和对象中的属性
HQL的关键字不区分大小写,但类名和属性名区分大小写
在Hibernate 提供的各种检索方式中, HQL是使用最广的一种检索方式. 它有如下功能:
在查询语句中设定各种查询条件
支持投影查询, 即仅检索出对象的部分属性
支持分页查询
支持连接查询
支持分组查询, 允许使用 HAVING 和 GROUP BY 关键字
提供内置聚集函数, 如 sum(), min() 和 max()
能够调用 用户定义的 SQL 函数或标准的 SQL 函数
支持子查询
支持动态绑定参数
测试类:
package com.my.bean;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import cn.itcast.util.SessionUtils;public class TestHQL { @Test public void demo01(){ // 查询所有 HQL Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); Query query = session.createQuery("from Customer"); List<Customer> allCustomer = query.list(); for (Customer customer : allCustomer) { System.out.println(customer.getName()); } transaction.commit(); session.close(); } @Test public void demo02(){ // 查询 带有条件的,可以使用别名 AS Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); Query query = session.createQuery("FROM Customer AS c WHERE c.id = 5"); Customer customer = (Customer) query.uniqueResult(); System.out.println(customer.getName()); transaction.commit(); session.close(); } @Test public void demo03(){ // 排序 order by , asc 升序 | desc 降序 Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); Query query = session.createQuery("from Customer c order by c.id desc"); List<Customer> all = query.list(); for (Customer customer : all) { System.out.println(customer); } transaction.commit(); session.close(); } @Test public void demo04(){ // 查询部分内容 Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); //将部分数据,封装到Customer 对象中 Query query = session.createQuery("select new Customer(c.name) from Customer c"); //必须提供相应的构造方式 List all = query.list(); System.out.println(all); transaction.commit(); session.close(); } @Test public void demo05(){ // 分页,查询订单 Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); Query query = session.createQuery("from Order"); // 添加分页条件 // 第一页 query.setFirstResult(0); query.setMaxResults(7); List<Order> all = query.list(); for (Order order : all) { System.out.println(order); } transaction.commit(); session.close(); } @Test public void demo06(){ // 参数 Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); //使用? Query query = session.createQuery("from Customer c where c.id = ? "); // 需要绑定参数,将实际参数替换? query.setParameter(0, 5); List<Customer> all = query.list(); for (Customer customer : all) { System.out.println(customer); } //* 使用hibernate提供的别名 Query query1 = session.createQuery("from Customer c where c.id = :id "); query1.setInteger("id", 5); //第一个参数就是hql中定义名称 :名称 List<Customer> all = query1.list(); for (Customer customer : all) { System.out.println(customer); } transaction.commit(); session.close(); } @Test public void demo07(){ // 聚合函数 Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); // 使用hibernate提供的别名 Query query = session.createQuery("select count(*) from Customer"); Object obj = query.uniqueResult(); Long totalPage = (Long) obj; transaction.commit(); session.close(); } @Test public void demo08(){ // 左外连接 -- left outer join Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); //* 使用hibernate提供的别名 Query query = session.createQuery("from Customer c left outer join c.orderSet"); // List 保存数据为 List ,数组中每一个元素又一个对象数组Object[],存放的是Customer,存放是Order List<Object[]> all = query.list(); for (Object[] objArr : all) { System.out.println(objArr); //objArr[0] --> Customer //objArr[1] --> Order } transaction.commit(); session.close(); } @Test public void demo09(){ // 迫切左外连接 -- left outer join fetch , 将数据封装到对象 Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); //* 使用hibernate提供的别名 , 使用 distinct进行去重 Query query = session.createQuery("select distinct c from Customer c left outer join fetch c.orderSet"); List<Customer> all = query.list(); for (Customer customer : all) { System.out.println(customer); } transaction.commit(); session.close(); } @Test public void demo10(){ // 命名查询 Session session = SessionUtils.openSession(); Transaction transaction = session.beginTransaction(); Query query = session.getNamedQuery("findAllCustomer"); //获得配置文件中的名称 System.out.println(query.list().size()); transaction.commit(); session.close(); }}
命名查询的hbm文件配置:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.my.bean"> <class name="Customer" table="t_customer"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="orderSet" cascade="save-update"> <key column="customer_id"/> <one-to-many class="Order"/> </set> </class> <!-- 定义全局的HQL语句 --> <query name="findAllCustomer"> <![CDATA[from Customer]]> </query></hibernate-mapping>
阅读全文
0 0
- Hibernate的HQL简介
- Hibernate 的hql查询简介
- hibernate之HQL简介
- Hibernate-HQL Query接口简介
- Hibernate 的hql查询简介【申明:来源于网络】
- hibernate的HQL
- Hibernate的Hql查询
- Hibernate的HQL总结
- Hibernate的HQL总结
- hibernate的HQL查询
- Hibernate的HQL查询
- hibernate的hql查询
- Hibernate的HQL语句
- Hibernate 的HQL SQL
- Hibernate HQL的使用
- Hibernate的HQL查询
- Hibernate的HQL查询
- hibernate的HQL查询
- 一个关于数据库迁移的小错误
- Altera Modelsim仿真sim模板
- 暴力——BZOJ2783/Luogu3252 [JLOI2012]树
- 使用FFmpeg实现抠图合并功能(chroma key)
- C中struct类型以及指针链表
- Hibernate的HQL简介
- 单链表
- Java 8 Streams map() 例子
- 我是新手
- 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
- vue中$nextTick()作用
- C++的命名空间、输入输出、重载、指针和引用的相关概念
- 爬虫之HTTP基础知识
- 基于对论文Content Importance Models for Scoring Writing From Sources的简单的2-gram的实现