-
HQL是Hibernate Query Language的缩写
-
hql和sql区别/异同
HQL | SQL |
---|---|
类名/属性 | 表名/列名 |
区分大小写,关键字不区分大小写 | 不区分大小写 |
别名 | 别名 |
?,从下标0开始计算位置(hibernate5之后不支持) | ?,从顺序1开始计算位置 |
:命名参数 | 不支持:命名参数 |
面向对象的查询语言 | 面向结构查询语言 |
-
处理返回的结果集
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) -
hql中使用占位符
4.1 ?占位符
从下标0开始计算位置
hibernate5之后不再支持?占位符
4.2 :命名参数 -
连接查询
-
聚合函数
sum
avg
max
min
count -
hql分页
int page = 2;// 页码:page
int row = 10;// 每页行数:rows
query.setFirstResult((page - 1) * row);// 设置起始记录下标
query.setMaxResults(row);// 设置返回的最大结果集
package com.test;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.hibernateOut.entity.Order;
import com.hibernateOut.entity.Orderitem;
import com.more.entity.Book;
import com.strurts.utli.HibernateUtils;
public class HibernateTest {
private Session session;
@Before
public void before() {
session = HibernateUtils.openSession();
}
@After
public void after() {
HibernateUtils.closesessionn();
}
/**
*
*/
@Test
public void text1() {
String hql="from Book";
List<Book> list = session.createQuery(hql).list();
for (Book book : list) {
System.out.println(book);
}
}
/**
* 结果处理二:
* 查询数据库中的一列
* 数据库:在数据库中查询不区分大小写
* hql:由于查询的是实体类的属性,所以区分大小写
*/
@Test
public void text2() {
String hql="select bookName from Book";
Query query = session.createQuery(hql);
List<String> list = query.list();
for (String name : list) {
System.out.println(name);
}
}
/**
* 结果方式三:
* 查询多个列 Object[]
*/
@Test
public void text3() {
String hql="select bookId,bookName from Book";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] name : list) {
System.out.println(Arrays.toString(name));
}
}
/**
* 结果处理四:通过Hibernate里面的map 函数
* 函数这个词出自数据库
* 函数不区分大小写
* 查询多个列 new map
*/
@Test
public void text4() {
String hql="select new map(bookId,bookName) from Book";
Query query = session.createQuery(hql);
List<Map> list = query.list();
for (Map name : list) {
System.out.println(name);
}
}
/**
* 处理情况五:
* 使用实体类构造器
*/
@Test
public void text5() {
String hql="select new Book(bookId,bookName) from Book";
Query query = session.createQuery(hql);
List<Book> list = query.list();
for (Book name : list) {
System.out.println(name);
}
}
/**
* Hibernate中的占位符
* 5版本以后弃用(?)
*
* Hibername的命名参数 :
*/
@Test
public void text6() {
String hql="from Book where bookName= :bookIds";
Query query = session.createQuery(hql);
query.setParameter("bookIds", "西游记");
List<Book> list = query.list();
System.out.println(list.get(0));
}
/**
* Hibernate中的占位符
* 接收数组查询
*
*/
@Test
public void text7() {
String hql="from Book where bookId in (:bookIds)";
Query query = session.createQuery(hql);
// List<Integer> bookIds=new ArrayList<>();
// bookIds.add(1);
// bookIds.add(2);
// bookIds.add(3);
//
// query.setParameterList("bookIds", bookIds);
query.setParameterList("bookIds", new Integer[] {2,3});
List<Book> list = query.list();
for (Book book : list) {
System.out.println(book);
}
}
/**
* Hibernate中的连接查询
*
*/
@Test
public void text8() {
String hql="select oi from Order o,Orderitem oi where o.order_id = oi.order.order_id ";
Query query = session.createQuery(hql);
List<Orderitem> list = query.list();
for (Orderitem order : list) {
System.out.println(order);
}
}
/**
* Hibernate中的分页
* 7. hql分页
int page = 2;// 页码:page
int row = 10;// 每页行数:rows
query.setFirstResult((page - 1) * row);// 设置起始记录下标
query.setMaxResults(row);// 设置返回的最大结果集
*/
@Test
public void text9() {
String hql=" from Book";
Query query = session.createQuery(hql);
int page=2;
int row=2;
query.setFirstResult((page-1)*row);
query.setMaxResults(row*page);
List<Book> list = query.list();
//
for (Book book : list) {
System.out.println(book);
}
}
}