-
什么是hql
HQL是Hibernate Query Language的缩写查全部
-
hql和sql区别/异同
HQL SQL
类名/属性 表名/列名
区分大小写,关键字不区分大小写 不区分大小写
别名 别名
?,从下标0开始计算位置(hibernate5之后不支持) ?,从顺序1开始计算位置
:命名参数 不支持:命名参数
面向对象的查询语言 面向结构查询语言注1:QuerySyntaxException:book is not mapped
-
处理返回的结果集
3.1 单个对象
select没有逗号
/**
* Hql语句结果集处理情况1: 单个对象
*/
@Test
public void test1() {
String hql = "from User where id=1";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(object.getClass().getName());
System.out.println(object);
}
3.2 Object[]
b.bookId, b.bookName
/**
* Hql语句结果集处理情况1: 返回数组
*/
@Test
public void test4() {
String hql = "select user_name,user_pwd from User where id=1";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(Arrays.toString((Object[]) object));
}
3.3 Map
new Map(b.bookId as bid, b.bookName as bname)
/**
* Hql语句结果集处理情况1: 返回Map
*/
@Test
public void test5() {
String hql = "select new map(user_name as name,user_pwd as pwd) from User where id=1";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(object);
}
3.4 new 构造方法(attr1,attr2)
new Book(b.bookId, b.price)
/**
* Hql语句结果集处理情况1: 查询多列,返回(集合)对象
*/
@Test
public void test6() {
String hql = "select new User(user_name,user_pwd) from User where id = 1";
Query query = sesstion.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj);
}
- hql中使用占位符
4.1 ?占位符
从下标0开始计算位置
hibernate5之后不再支持?占位符
4.2 :命名参数
/**
* hql语句的命名参数
*/
@Test
public void test7() {
String hql = "select new User(user_name,user_pwd) from User where id in :id";
Query query = sesstion.createQuery(hql);
List<Integer>id=new ArrayList<>();
id.add(1);
id.add(2);
query.setParameterList("id", id);
List list = query.list();
for (Object object : list) {
System.out.println(object);
}
}
- 连接查询
/**
* 连接查询
* 以订单和订单项
*/
@Test
public void test8() {
String hql = "select new map(o.orderNo as a,oi.productId as b) from Order o,OrderItem oi where o = oi.order";
Query query = sesstion.createQuery(hql);
List list = query.list();
for (Object object : list) {
System.out.println(object);
}
}
- 聚合函数
sum
@Test
public void test9() {
String hql = "select sum(id) from User";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(object);
}
avg
@Test
public void test9() {
String hql = "select avg(id) from User";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(object);
}
max
@Test
public void test9() {
String hql = "select max(id) from User";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(object);
}
min
@Test
public void test9() {
String hql = "select min(id) from User";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(object);
}
count
@Test
public void test9() {
String hql = "select count(*) from User";
Query query = sesstion.createQuery(hql);
Object object = query.getSingleResult();
System.out.println(object);
}
- hql分页
int page = 2;// 页码:page
int row = 10;// 每页行数:rows
query.setFirstResult((page - 1) * row);// 设置起始记录下标
query.setMaxResults(row);// 设置返回的最大结果集
/**
* 需求:查询用户表第二页数据 每页三条
*/
@Test
public void test10() {
String hql = "from User";
Query query = sesstion.createQuery(hql);
int page=1;
int affset=3;
query.setFirstResult((page-1)*affset);
query.setMaxResults(affset);
List list = query.list();
for (Object object2 : list) {
System.out.println(object2);
}
}