根据已经加载的对象,导航到其他对象,利用类与类之间的关系来检索对象。
例如:
Order order = (Order) session.get(Order.class,1);
Customer customer = order.getCustomer;
指使用Session的get()和load()方法加载某条记录对应的对象。
Customer customer = (Customer) session.get(Customer.class,1);
Customer customer = (Customer) session.load(Customer.class,1);
特性:
面向对象的查询语言,与SQL类似,使用类、对象、属性的概念。官方推荐。
具有如下功能:
- 在查询语句中设定各种查询条件。
- 支持投影查询,仅检索对象的部分属性。
- 支持分页查询
- 支持分组查询,允许使用group by和having关键字。
- 提供内置聚集函数,如:sum()、min()和max()。
- 能够调用用户定义的SQL函数。
- 支持子查询,即嵌套查询。
- 支持动态绑定参数。
A:指定别名
/**
* 指定别名查询(就是另外给POJO类取个名字,例如:c)
*/
@Test
public void testQuery1() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "select c from Customer c";
//创建Query对象
//Query query = session.createQuery(hql,Customer.class);
//执行查询,获得结果
List cList = session.createQuery(hql,Customer.class).list();
//遍历
for (Customer c : cList) {
System.out.println(c.getId()+":"+c.getName());
}
//关闭事务
trans.commit();
session.close();
}
B:检索单个对象
/**
* 查询单个的对象
*/
@Test
public void testQuery2() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "from Customer c where c.id=6";
//创建Query对象
Query query = session.createQuery(hql,Customer.class);
//查询获得结果
Customer customer = (Customer) query.uniqueResult();
System.out.println(customer.getId()+":"+customer.getName());
//关闭事务
trans.commit();
session.close();
}
C:投影查询(查询单独一个字段信息)
/**
* 投影查询:即查询部分字段信息(一个)
*/
@Test
public void testQuery3() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "select c.name from Customer c";
//创建Query对象
Query query = session.createQuery(hql,String.class);
List list = query.list();
for (String string : list) {
System.out.println(string);
}
//提交事务
trans.commit();
session.close();
}
D:投影查询(查询多个字段信息)
/**
* 投影查询:即查询部分字段信息(多个)
*/
@Test
public void testQuery4() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "select c.id,c.name from Customer c";
//创建Query对象
Query
E:投影查询(查询多个字段信息且面向对象)
/**
* 投影查询:即查询部分字段信息(多个)且面向对象查询
* PS:POJO类要有和Customer(id,name)对应的构造函数
*/
@Test
public void testQuery5() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "select new Customer(id,name) from Customer";
//创建Query对象
Query query = session.createQuery(hql,Customer.class);
List list = query.list();
for (Customer c : list) {
System.out.println(c.getId()+":"+c.getName());
}
//提交事务
trans.commit();
session.close();
}
F:检索排序
/**
* 排序检索(order标志排序)
*/
@Test
public void testQuery6() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句(order标志排序,desc倒序)
String hql = "from Customer order by id desc";
Query query = session.createQuery(hql,Customer.class);
List list = query.list();
for (Customer c : list) {
System.out.println(c.getId()+":"+c.getName());
}
//提交事务
trans.commit();
session.close();
}
G:分页检索
/**
* 分页检索
*/
@Test
public void testQuery7() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "from Customer";
//创建Query对象
Query query = session.createQuery(hql,Customer.class);
//设置起始下标
query.setFirstResult(0);
//设置每页显示条数
query.setMaxResults(5);
//集合接收
List list = query.list();
for (Customer c : list) {
System.out.println(c.getId()+":"+c.getName());
}
//提交事务
trans.commit();
session.close();
}
H:条件检索(按参数位置)
/**
* 条件检索:按参数位置查询
* 需要使用JPA-style(?0..)
* 可以使用通配符%%
*/
@Test
public void testQuery8() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "from Customer where name=?0 and id=?1";
//创建Query对象
Query query = session.createQuery(hql,Customer.class);
//给HQL语句中的占位符代表的参数赋值
//query.setParameter(0,"陈飞%");
query.setParameter(0,"万星月").setParameter(1,3);
//返回结果
Customer c = query.getSingleResult();
System.out.println(c.getId()+":"+c.getName());
// List list = query.list();
// for (Customer c : list) {
// System.out.println(c.getId()+":"+c.getName());
// }
//提交事务
trans.commit();
session.close();
}
I:条件检索(按参数名)
/**
* 条件检索:按参数名字查询
*/
@Test
public void testQuery9() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "from Customer where id=:id";
//创建Query对象
Query query = session.createQuery(hql,Customer.class);
//添加参数
query.setParameter("id",5);
//执行查询,返回结果
List list = query.list();
for (Customer c : list) {
System.out.println(c.getId()+":"+c.getName());
}
//提交事务
trans.commit();
session.close();
}
J:聚合函数
/**
* 聚合函数:求总记录数量
*/
@Test
public void testFunction1() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "select count(id) from Customer";
//创建Query对象
Query query = session.createQuery(hql,Long.class);
Long result = query.uniqueResult();
System.out.println(result);
//提交事务
trans.commit();
session.close();
}
/**
* 聚合函数:求最大值
*/
@Test
public void testFunction2() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "select max(id) from Customer";
//创建Query对象
Query query = session.createQuery(hql,Integer.class);
Integer result = query.uniqueResult();
System.out.println(result);
//提交事务
trans.commit();
session.close();
}
/**
* 聚合函数:求最小值
*/
@Test
public void testFunction3() {
//获得session对象
Session session = getSession();
//通过session开启事务
Transaction trans = session.beginTransaction();
//HQL语句
String hql = "select min(id) from Customer";
//创建Query对象
Query query = session.createQuery(hql,Integer.class);
Integer result = query.uniqueResult();
System.out.println(result);
//提交事务
trans.commit();
session.close();
}
这里就不介绍了,如果需要,请点击链接:万星明的Hibernate
即:直接使用SQL语句进行检索查询:
SQLQuery sqlQuery = session.createSQLQuery("select id,name,age,city from customer");