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%"));
posted @ 2020-08-13 16:04  RicardoWX  阅读(211)  评论(0编辑  收藏  举报