一、Criteria 查询接口(做条件查询非常合适)
QBC:Query By Criteria – 按条件进行查询
QBC 查询方式的使用
先创建查询的接口
Criteria c = session.createCriteria(User.class);
设置查询的条件
criteria.add(Restrictions.gt("age", 10));
查询数据
List<User> list = criteria.list();
二、Criteria查询接口不带条件查询
1、新建 TestQBC 类
/Hibernate5_d02_c05/src/hibernate/test/TestQBC.java
程序代码如下:
package hibernate.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import hibernate.domain.User;
import hibernate.util.HibernateUtils;
/*
* QBC的查询测试
*/
public class TestQBC {
/*
* 不带条件的查询
*/
@Test
public void test1(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
//1.创建QBC查询接口
Criteria c = session.createCriteria(User.class);
//2.查询所有数据
List<User> users = c.list();
for (User user : users) {
System.out.println(user);
}
tr.commit();
//session 不用关闭
}
}
2、为User 类添加toString()方法
/Hibernate5_d02_c05/src/hibernate/domain/User.java
程序代码如下:
...
public class User implements Serializable{
...
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
3、运行项目

运行效果
三、Criteria查询接口条件查询
以下操作均在/Hibernate5_d02_c05/src/hibernate/test/TestQBC.java
中修改。
1、like 模糊查询
程序代码如下:
...
public class TestQBC {
...
/*
* like 模糊查询
*/
@Test
public void test2(){
//1.创建QBC查询接口
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria c = session.createCriteria(User.class);
//2.设置条件
//名字中带熊的记录
c.add(Restrictions.like("name", "%熊%"));
//3.查询所有数据
List<User> users = c.list();
for (User user : users) {
System.out.println(user);
}
tr.commit();
//session 不用关闭
}
}

运行效果
2、and 多条件查询
程序代码如下:
...
public class TestQBC {
...
/*
* and 多条件查询
*/
@Test
public void test3(){
//1.创建QBC查询接口
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria c = session.createCriteria(User.class);
//2.设置条件
//设置第一个条件:名字中带熊的记录
//第一个参数是 javabean中的属性
//第二个参数是要设置的值
c.add(Restrictions.like("name", "%熊%"));
//设置第二个条件:年龄大于10
c.add(Restrictions.gt("age",10));
//设置第 N个条件
//3.查询所有数据
List<User> users = c.list();
for (User user : users) {
System.out.println(user);
}
tr.commit();
//session 不用关闭
}
}

运行效果
3、or 多条件查询
程序代码如下:
...
public class TestQBC {
...
/*
* or 多条件查询
*/
@Test
public void test4(){
//1.创建QBC查询接口
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria c = session.createCriteria(User.class);
//2.设置条件
//名字带熊或年龄大于10岁
c.add(Restrictions.or(Restrictions.like("name", "%熊%"),
Restrictions.gt("age", 10)));
//3.查询所有数据
List<User> users = c.list();
for (User user : users) {
System.out.println(user);
}
tr.commit();
//session 不用关闭
}
}

运行效果
4、between..and 多条件查询
程序代码如下:
...
public class TestQBC {
...
/*
* between..and 多条件查询
*/
@Test
public void test5(){
//1.创建QBC查询接口
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria c = session.createCriteria(User.class);
//2.设置条件
//年龄在20和30之间的记录
c.add(Restrictions.between("age", 20, 30));
//查询所有数据
List<User> users = c.list();
for (User user : users) {
System.out.println(user);
}
tr.commit();
//session 不用关闭
}
}

运行效果
5、分页查询
程序代码如下:
...
public class TestQBC {
...
/*
* 分页查询
*/
@Test
public void test6(){
//1.创建QBC查询接口
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria c = session.createCriteria(User.class);
//2.设置条件
//参考mysql的分页 limit index size
//index 索引从哪一条记录开始
//size 每页条数
c.setFirstResult(2);//第三条记录
c.setMaxResults(2);//每页数据
//3.查询所有数据
List<User> users = c.list();
for (User user : users) {
System.out.println(user);
}
tr.commit();
//session 不用关闭
}
}

运行效果