hql语句

  1. 什么是hql
    HQL是Hibernate Query Language的缩写

    查全部

  2. hql和sql区别/异同
    HQL SQL
    类名/属性 表名/列名
    区分大小写,关键字不区分大小写 不区分大小写
    别名 别名
    ?,从下标0开始计算位置(hibernate5之后不支持) ?,从顺序1开始计算位置
    :命名参数 不支持:命名参数
    面向对象的查询语言 面向结构查询语言

代码:
package com.zking.seven;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.hibernate.query.Query;

import com.ddk.util.Book;
import com.mysql.fabric.xmlrpc.base.Array;
import com.zking.util.HibernateUtils;

/**

  • 讲解hql的多种查询方式
  • @author Administrator

*/
public class test {

private	Session session;
private Transaction transaction;
private Query query;

@Before
public void before() {
	session=HibernateUtils.openSession();
	transaction=session.beginTransaction();
}

@After
public void after() {
	transaction.commit();
	session.close();
}


/**
 * 结果返回对象
 * 查询所有
 * select * from t_hibernate_book;
 */
@Test
public void testList1() {
	String hql="from Book";
	query = session.createQuery(hql);
	List<Book> list=query.list();
	for(Book b:list) {
		System.out.println(b);
	}
	
}
/**
 * 查询数据库表中的一列
 * 数据库 :在数据库中查询,是不区分大小写的
 * hql:由于你查询的是实体类的属性,那么区分大小写
 */
@Test
public void testString2() {
	String hql="select bookName from Book";
	query = session.createQuery(hql);
	List<String> list = query.list();
	for(String b: list) {
		System.out.println(b);
	}
}



/**
 * Object[]
 * 自定义MVC中的EntityBaseDao中
 * 数据库 8列
 * 实体类 8个属性
 * 
 * 				insert 
 * 						Book    b
 * 
 * 如果查询的不是一张完整的表,那么最后使用map集合
 */
@Test
public void testString3() {
	String hql="select bookId,bookName from Book";
	query = session.createQuery(hql);
	List<Object[]> list = query.list();
	for(Object[] b: list) {
		System.out.println(Arrays.toString(b));
	}
}

/**
 * 处理情况4:通过hibernate函数Map去处理
 * 函数这个词来自于数据库
 * 函数不区分大小写
 */
@Test
public void testmap4() {
	String hql="select new map(bookId,bookName) from Book";
	query = session.createQuery(hql);
	List<Map> list=query.list();
	for(Map b : list) {
		System.out.println(b);
	}
}
/**
 * 
 * 处理情况5:通过构造方法进行查询
 */
@Test
public void testmap5() {
	String hql="select new Book(bookId,bookName) from Book";
	query = session.createQuery(hql);
	List<Book> list=query.list();
	for(Book b : list) {
		System.out.println(b);
	}
}
/**
 * 讲解hibernate中的占用符的问题
 * 5版本以后弃用“?”
 * 
 * 使用方法一
 */

@Test
public void testlist6() {
	String hql="from Book where bookId =:bookId";
	query = session.createQuery(hql);
	query.setParameter("bookId", 1);
	Book book=(Book) query.getSingleResult();
	System.out.println(book);
	
}

/**
 * 使用方法二
 */
@Test
public void testlist61() {
	String hql="from Book where bookId in (:bookId)";
	query = session.createQuery(hql);
	List<Integer> bookId=new ArrayList<>();
	bookId.add(1);
	bookId.add(2);
	bookId.add(3);
	query.setParameterList("bookId", bookId);
	List list = query.list();
	for (Object object : list) {
		System.out.println(object);
	}
}

/**
 * 使用方法三
 */
@Test
public void testlist62() {
	String hql="from Book where bookId in (:bookId)";
	query = session.createQuery(hql);
	query.setParameterList("bookId", new Integer[] {2,4});
	List list = query.list();
	for (Object object : list) {
		System.out.println(object);
	}
}

/**
 * 连表查询
 */

@Test
public void testlist7() {
	String hql="select o.orderNo,oi.productId from Order o,OrderItem oi where o.orderId = oi.order.orderId";
	List<Object[]> list = session.createQuery(hql).list();
	for (Object[] object : list) {
		System.out.println(Arrays.toString(object));
	}
}

/**
 * 连表查询map
 */
@Test
public void testlist78() {
	String hql="select new map(o.orderNo,oi.productId) from Order o,OrderItem oi where o.orderId = oi.order.orderId";
	List<Map> list = session.createQuery(hql).list();
	for (Map object : list) {
		System.out.println(object);
	}
}

/**
 * 聚合函数	
 */

@Test
public void testlist8() {
	String hql="select count(*) from Book";
	long c = (long) session.createQuery(hql).getSingleResult();
	System.out.println(c);
}

/**
 * 分页
 */
@Test
public void testlist9() {
	String hql="from Book";
	Query query = session.createQuery(hql);
	int p=2;
	int o=2;
	query.setFirstResult((p-1)*o);
	query.setMaxResults(o);
	List<Book> list = query.list();
	for (Book b : list) {
		System.out.println(b);
	}
}

}
3. 处理返回的结果集
3.1 单个对象
select没有逗号
3.2 Object[]
b.bookId, b.bookName
3.3 Map
new Map(b.bookId as bid, b.bookName as bname)
3.4 new 构造方法(attr1,attr2)
new Book(b.bookId, b.price)

  1. hql中使用占位符
    4.1 ?占位符
    从下标0开始计算位置
    hibernate5之后不再支持?占位符

4.2 :命名参数

  1. 连接查询

  2. 聚合函数
    sum
    avg
    max
    min
    count

  3. hql分页
    int page = 2;// 页码:page
    int row = 10;// 每页行数:rows
    query.setFirstResult((page - 1) * row);// 设置起始记录下标
    query.setMaxResults(row);// 设置返回的最大结果集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值