HQL是 Hibernate Query Language 的缩写, 是适用于 hibernate 的 查询语句
HQL SQL
类名/属性 表名/列名
区分大小写,关键字不区分大小写 不区分大小写
别名 别名
?,从下标0开始计算位置(hibernate5之后不支持) ?,从顺序1开始计算位置
:命名参数 不支持:命名参数
面向对象的查询语言 面向结构查询语言
3.1 hql处理情况1,返回对象
/**
* 通过singleResult查询单个结果集
* hql处理情况1,返回对象
*/
@Test
public void singleObj() {
String hql = "from User where id = 1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj);
}
3.2 hql处理情况2,返回 字符串
/**
* 通过singleResult查询单个结果集
* 查询单个列段
* hql处理情况2,返回字符串
*/
@Test
public void singleObj0() {
String hql = "select userName from User where id = 1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj);
}
3.3 hql处理情况3,返回 Object [ ]
/**
* 查询多个列段
* hql处理情况3,返回数组
*/
@Test
public void singleObj00() {
String hql = "select userName,realName from User where id = 1";
Query query = session.createQuery(hql);
List list = query.list();
for (Object obj : list) {
System.out.println(obj);
}
}
3.4 hql处理情况4,返回 Map
/**
* 通过singleResult查询单个结果集
* 语句实例化map, 查处结果用HashMap集合结构输出
* 属性名可通过 as 自定义名称,如未自定义则按下标从0开始,给值添加键名称
* hql处理情况4,返回Map
*/
@Test
public void singleObj3() {
String hql = "select new map(userName as a, userPwd as b) from User where id = 1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj);
}
3.5 hql处理情况5,使用new 构造方法(attr1,attr2) 返回对象
/**
* 通过ResultList查询多个结果集或集合
* 使用构造器,查询相应值
* hql处理情况5、查询多个列段,返回对象
*/
@Test
public void singleObj5() {
String hql = "select new User(userName, realName) from User";
Query query = session.createQuery(hql);
List resultList = query.getResultList();
for (Object obj : resultList) {
System.out.println(obj);
}
}
/**
* hql 命名参数
* ? 占位符 来描述查询条件的参数下标以及参数值 注:hibernate5之后不再支持占位符
* : + 字符 :命名参数 来描述一个参数的值
*/
@Test
public void singleObj2() {
// String hql = "from User where id = :id";
String hql = " from User where id in :ids";
Query query = session.createQuery(hql);
// query.setParameter("id", new Integer(1));
List list = new ArrayList();
list.add(1);
list.add(2);
query.setParameterList("ids", list);
// Object singleResult = query.getResultList();
// System.out.println(singleResult);
List list2 = query.list();
for (Object objs : list2) {
System.out.println(objs);
}
}
注 : ?占位符 , hibernate5 之后不再支持?占位符
/**
* 连接查询 与 SQL 相似
* 这里使用Map返回
*/
@Test
public void singleObj6() {
String hql = "select new map(o.order_no, oi.product_id) from Order o,OrderItem oi where o = oi.order";
Query query = session.createQuery(hql);
List resultList = query.getResultList();
for (Object obj : resultList) {
System.out.println(obj);
}
}
/**
* 聚合函数,与Sql使用相似
* 获取到的是单个对象
*/
@Test
public void singleObj7() {
String hql = "select count(*) from User";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj);
}
提供两个方法 setFirstResult( 起始页 ),setMaxResults( 显示多少条数据 ),下列以 MySql 为例
/**
* 分页
* 通过ResultList查询多个结果集或集合
* 查询第二页数据,每页显示一条数据
*/
@Test
public void singleObj8() {
String hql = " from User";
Query query = session.createQuery(hql);
int page = 2;
int rows = 1;
query.setFirstResult((page-1)*rows);
query.setMaxResults(rows);
List list = query.list();
for (Object obj : list) {
System.out.println(obj);
}
}