Query
你可从度娘上可看到这样的文字:
我们主要通过Query完成查询操作,通过Query即可以执行HQL语句,如下:
Query query = session.createQuery("HQL语句");
又可以执行本地SQL语句:
SQLQuery sqlQuery = session.createSQLQuery("本地SQL语句");
温馨提示:SQLQuery是Query的子类。
查询所有操作——使用HQL
我们这儿在com.meimeixia.hibernate.demo01包下创建一个单元测试类——TestQuery.java。使用HQL语句完成查询所有客户的操作,代码如下:
package com.meimeixia.hibernate.demo01;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.meimeixia.hibernate.utils.HibernateUtils;
/**
* Hibernate的其他API
* @author liayun
*
*/
public class TestQuery {
//使用HQL完成查询所有操作
@Test
public void test01() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Customer";//from后面是类名
Query query = session.createQuery(hql);
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
tx.commit();
}
}
条件查询
条件查询可以使用where关键字。例如,查询姓王的客户。
虽然我们可以查询出来,但我们有没有想过姓王的客户即使查出来也只有一个呢,我们有必要把它放在List集合中吗?如果查询结果可以保证就是唯一的,那么我们可以使用Query的uniqueResult()方法来得到一个单独对象。
分页查询
在执行分页查询时,我们试着向cst_customer表中插入100条记录。
接下来,就来分页查询,如果说一页显示10条记录,但我们要得到第二页的数据,咋办?
Criteria
你可从度娘上可看到这样的文字:
首先我要想使用Criteria,必须得到Criteria,可这么做:
Criteria criteria = session.createCriteria(Xxx.class);
查询所有
例,查询所有客户。
package com.meimeixia.hibernate.demo01;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.meimeixia.hibernate.utils.HibernateUtils;
public class TestCriteria {
// 查询所有
@Test
public void test01() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
//查询所有
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
tx.commit();
}
}
条件查询
例,查询姓渣并且客户信息来源为b站的客户。
分页查询
分页查询操作与Query的方法一样。如果说一页显示10条记录,但我们要得到第二页的数据,咋办?
小结
我们使用Criteria可以更加面向对象地去操作,它非常适合进行多条件组合查询,但我感觉没什么鸟用!