HQL查询语句:一般用于多表但不复杂的查询。(Hibernate Query Language)
Criteria查询语句:一般用于单表查询。(Query By Criteria)
原生SQL语句:一般用于复杂的查询。
Test.java:
package cn.xxx.demo;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.xxx.domain.Customer;
import cn.xxx.utils.HibernateUtils;
//测试HQL语句 (Hibernate Query Language) 相当于面向对象的sql。
public class Test {
@Test
//基本查询
public void fun1(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
//1> 书写HQL语句
//String hql = " select * from cn.xxx.domain.Customer "; // "select * " 查询所有列,可以省略。 所有包中只有一个Customer类,可以省略包名。
String hql = " from Customer "; // 查询所有Customer对象
//2> 根据HQL语句创建查询对象
Query query = session.createQuery(hql);
//3> 根据查询对象获得查询结果
List<Customer> list = query.list(); // 返回list结果。 结果自动封装成对象(list)。
//query.uniqueResult(); //接收唯一的查询结果 (结果只有一行)
System.out.println(list);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//条件查询
//HQL语句中,不可能出现任何数据库相关的信息(表名,列名);只会出现对象类名和对象属性名
public void fun2(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
//1> 书写HQL语句
String hql = " from Customer where cust_id = 1 "; //
//2> 根据HQL语句创建查询对象
Query query = session.createQuery(hql);
//3> 根据查询对象获得查询结果
Customer c = (Customer) query.uniqueResult();
System.out.println(c);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//条件查询
//问号占位符
public void fun3(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
// ? 问号占位符
String hql = " from Customer where cust_id = ? "; // 根据id查询Customer对象
Query query = session.createQuery(hql);
//设置参数,替换问号占位符
//query.setLong(0, 1l);
query.setParameter(0, 1l); // 下标从0开始。 JDBC是从1开始。
Customer c = (Customer) query.uniqueResult();
System.out.println(c);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//条件查询
//命名占位符
public void fun4(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
// :cust_id 命名占位符
String hql = " from Customer where cust_id = :cust_id "; // 根据id查询Customer对象
Query query = session.createQuery(hql);
// 为占位符设置参数
query.setParameter("cust_id", 1l);
Customer c = (Customer) query.uniqueResult();
System.out.println(c);
//-------------------------------------------
tx.commit();
session.close();
}
@Test
//分页查询
public void fun5(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//-------------------------------------------
String hql = " from Customer ";
Query query = session.createQuery(hql);
//设置分页信息 limit ?,?
query.setFirstResult(0); // 跳过几条
query.setMaxResults(10); // 每页几条
List<Customer> list = query.list();
System.out.println(list);
//-------------------------------------------
tx.commit();
session.close();
}
}