Hibernate新的QBC检索方法
一、QBC
QBC(Query By Criteria)是Hibernate的一种检索对象的方式。在Hibernate5.2版本之前QBC检索主要由Criteria接口来完成。在Hibernate5.2版本之后session.createCriteria()已经过时,Hibernate采用了全新的方法来进行查询。
二、代码
创建一个Customer类对应数据库中的表
public class Customer {
private int id;
private String name;
private Integer age;
private String sex;
private String city;
// standard setters and getters
}
使用QBC从数据库中取出Customer所有数据
@Test
public void qbcTest(){
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Customer> criteriaQuery = builder.createQuery(Customer.class);
Root<Customer> root = criteriaQuery.from(Customer.class);
criteriaQuery.select(root);
Query<Customer> query = session.createQuery(criteriaQuery);
List<Customer> results = query.getResultList();
for (Customer c:results){
System.out.println(c.getName());
}
transaction.commit();
session.close();
sessionFactory.close();
}
三、使用表达式
可以使用CriteriaBuilder根据特定条件限制查询结果。 通过使用CriteriaQuery的 where()方法并提供由CriteriaBuilder创建的表达式。
例子如下:
1.获取年龄大于30岁的客户
criteriaQuery.select(root).where(builder.gt(root.<Number>get("age"),30));
2.获取年龄小于30岁的客户
criteriaQuery.select(root).where(builder.lt(root.<Number>get("age"),30));
3.获取年龄在18岁与30岁之间的客户
criteriaQuery.select(root).where(builder.between(root.<Number>get("age"),18,30));
4.获取名字带有jo的客户
criteriaQuery.select(root).where(builder.like(root.<String>get("name"),"%jo%"));