HQL查询
HQL:单表、简单的多表查询 - 永远不会出现和表相关的信息 - 所有信息与类信息相关
1.通过hql获得query对象
// Query query = session.createQuery("from Customer where cust_id = ? and cust_name=?");
Query query = session.createQuery("from Customer where cust_id=:id and cust_name=:name");
2.设置占位符参数
// query.setString(0, "阿里巴巴");
// query.setParameter(0, "阿里巴巴");
// :id :name - 命名占位符
query.setParameter("name", "阿里巴巴");
query.setParameter("id", 8l);
3.获得结果集 - 唯一结果
Customer c = (Customer) query.uniqueResult();
4.查询全部Customer对象
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------
// 1> 通过hql获得query对象
// select * from cst_customer;
// from Customer
Query query = session.createQuery("from Customer");
// 2> 获得查询集合列表
List<Customer> list = query.list();
System.out.println(list);
// -----------------------
tx.commit();
session.close();
Criteria查询
Criteria只能做单表查询
1.使用Criteria查询全部Customer对象
// 1> 通过session获得Criteria对象
Criteria criteria = session.createCriteria(Customer.class);
// 2> 获得结果
List<Customer> list = criteria.list();
2.使用Criteria根据name查询Customer对象
// 1> 获得criteira对象
Criteria criteria = session.createCriteria(Customer.class);
// 2> 设置查询条件 - 静态方法Restrictions
criteria.add(Restrictions.eq("cust_name", "阿里巴巴"))
.add(Restrictions.idEq(8l));
// 3> 获得结果集 - 唯一结果
Customer customer = (Customer) criteria.uniqueResult();
原生SQL查询
1.使用SQL查询全部Customer对象
public void test01() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------
// 0> sql语句
String sql = "select * from cst_customer";
// 1> 通过session获得SQLQuery对象
SQLQuery sqlQuery = session.createSQLQuery(sql);
// 2> 获得结果 - 所有的记录,每一条封装为一个数组
List<Object[]> list = sqlQuery.list();
for (Object[] os:list) {
System.out.println(Arrays.toString(os));
}
// -----------------------
tx.commit();
session.close();
}
- // 使用SQL查询全部Customer对象 - 封装对象
public void test03() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------
// 0> sql语句
String sql = "select * from cst_customer";
// 1> 通过session获得SQLQuery对象
SQLQuery sqlQuery = session.createSQLQuery(sql);
// 在查询之前,添加实体类型
sqlQuery.addEntity(Customer.class);
// 2> 获得结果 - 按照实体类型,封装对象
List<Customer> list = sqlQuery.list();
System.out.println(list);
// -----------------------
tx.commit();
session.close();
}
3.使用sql根据name查询Customer对象
public void test02() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
// -----------------------
// 0> sql语句,占位符只能用?
String sql = "select * from cst_customer where cust_name=?";
// 1> 获得SQLQuery对象
SQLQuery sqlQuery = session.createSQLQuery(sql);
// 2> 设置查询条件 - 静态方法Restrictions
sqlQuery.setParameter(0, "阿里巴巴");
// 3> 获得结果集 - 唯一结果
Customer customer = (Customer) sqlQuery.uniqueResult();
System.out.println(customer);
// -----------------------
tx.commit();
session.close();
}