1、导航对象图检索方式
根据已经加载的对象,导航到其他对象,利用类与类之间的关系来检索对象。
例如:
Order order = (Order) session.get(Order.class,1);
Customer customer = order.getCustomer;
2、OID检索
指使用Session的get()和load()方法加载某条记录对应的对象。
Customer customer = (Customer) session.get(Customer.class,1);
Customer customer = (Customer) session.load(Customer.class,1);
3、HQL检索(重点)
特性:
面向对象的查询语言,与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<Customer> query = session.createQuery(hql,Customer.class);
//执行查询,获得结果
List<Customer> 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 =