hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式,Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode接下来用一个测试来感受一下。
package cn.liangce.criteria; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Projection; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.junit.Test; import cn.liangce.domain.Customer; import cn.liangce.utils.HibernateUtils; //测试Criteria查询 public class Demo { @Test //基本查询 public void fun1(){ //1.获得session Session session=HibernateUtils.openSession(); //2.控制事务 Transaction ts = session.beginTransaction(); //3.执行操作 //查询所有Customer对象,创建查询对象 Criteria criteria = session.createCriteria(Customer.class); List list = criteria.list();//List结果集 System.out.println(list); // Object uniqueResult = criteria.uniqueResult();独一无二的结果集 //4.提交事务,关闭资源 ts.commit(); session.close(); } @Test //条件查询 //HQL语句中,不可能出现任何数据库相关的信息的 // > gt // >= ge // < lt // <= le // == eq // != ne // in in // between and between // like like // is not null isNotNull // is null isNull // or or // and and public void fun2(){ //1.获得session Session session=HibernateUtils.openSession(); //2.开启事务 Transaction ts = session.beginTransaction(); //3.执行操作 //创建Criteria查询对象 Criteria criteria = session.createCriteria(Customer.class); //添加查询参数 criteria.add(Restrictions.eq("cust_id", 1l)); //执行查询,获得结果 Customer customer = (Customer) criteria.uniqueResult(); System.out.println(customer); //4.提交事务,关闭资源 ts.commit(); session.close(); } @Test //分页查询 public void fun3(){ //1.获得session Session session=HibernateUtils.openSession(); //2.开启事务 Transaction ts = session.beginTransaction(); //3.执行操作 //创建Criteria查询对象 Criteria criteria = session.createCriteria(Customer.class); //添加查询参数,设置分页信息 criteria.setFirstResult(1);//本页起始索引 criteria.setMaxResults(3);//最大显示条数 //执行查询,获得结果 List list = criteria.list(); System.out.println(list); //4.提交事务,关闭资源 ts.commit(); session.close(); } @Test //查询总条数 public void fun4(){ //1.获得session Session session=HibernateUtils.openSession(); //2.开启事务 Transaction ts = session.beginTransaction(); //3.执行操作 //创建Criteria查询对象 Criteria criteria = session.createCriteria(Customer.class); //添加查询参数,记录总条数 criteria.setProjection(Projections.rowCount()); //执行查询,获得结果 Long uniqueResult = (Long) criteria.uniqueResult();//注意返回值是Long System.out.println(uniqueResult); //4.提交事务,关闭资源 ts.commit(); session.close(); } }
文章来源: Hibernate之criteria查询方式