【Java中级】11.0 SSH之Hibernate框架(八)——Hibernate的查询方式之QBC

技术分享  / 只看大图  / 倒序浏览   ©

#楼主# 2020-2-11

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
1.0 不是全部查询都支持QBC查询

QBC查询:Query By Criteria,条件查询,一种更加面向对象化的查询方式。
相比于HQL查询,QBC更适合做条件查询。
2.0 简单查询

在项目中新建HibernateDemo2.java方法

055022ga812nn112l6nzn1.png
package com.edp.hibernate.demo1;/** *  * @Title: HibernateDemo2.java * @Package com.edp.hibernate.demo1 * @author EdPeng * @version 创建时间 2020年2月9日下午6:42:17 * @Description QBC查询 * @version V1.0 */import java.util.List;import javax.persistence.criteria.CriteriaBuilder;import javax.persistence.criteria.CriteriaQuery;import javax.persistence.criteria.Predicate;import javax.persistence.criteria.Root;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.criterion.Order;import org.junit.Test;import com.edp.hibernate.domain.Customer;import com.edp.hibernate.utils.HibernateUtils;public class HibernateDemo2 {    @Test    /**     * @Title: demo1     * @Description: 简单的查询     * @param     * @return void     * @throws     *     */    public void demo1() {        Session session = HibernateUtils.getCurrentSession();        Transaction transaction = session.beginTransaction();        // 简单查询        CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();        // 1. 获取CriteriaQuery对象        CriteriaQuery createQuery = criteriaBuilder.createQuery(Customer.class);        // 2. 指定根条件        createQuery.from(Customer.class);        // 3. 通过session执行查询        List list = session.createQuery(createQuery).list();        for (Customer customer : list) {            System.out.println(customer);        }        transaction.commit();    }}
调用entityManager.getCriteriaBuilder()来获取CriteriaBuilder。CriteriaBuilder可以用于创建CriteriaQuery、CriteriaUpdate和CriteriaDelete。
除此之外类似count、max等函数也是由CriteriaBuilder来创建的。其中Entitymanager可以使用@PersistenceContext注解来进行注入。
调用criteriaBuilder.createQuery来创建CriteriaQuery。其中createQuery的参数是Query返回值类型。
调用query.from(Order.class)。参数是对应于order表的实体类,query.from类似于sql中的from语句,该方法的执行等价于sql中的from order。
调用 query.select创建映射。 query.select(criteriaBuilder.count(root.get(“id”)))等价于select count(id)。如果执行query.select(root)则等价于select *。
使用CriteriaBuilder构造查询条件Predicate,该predicate也就是在where后面的条件子句。
将Predicate放在 query.where中。
末了执行查询获取数据。
3.0 排序查询

    @Test    /**     *      * @Title: demo2     * @Description: 排序查询     * @param      * @return void     * @throws     *     */    public void demo2() {        Session session = HibernateUtils.getCurrentSession();        Transaction transaction = session.beginTransaction();                //排序查询        CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();        // 1. 获取CriteriaQuery对象        CriteriaQuery createQuery = criteriaBuilder.createQuery(Customer.class);         //2. 指定根条件,获得实体的查询根对象         Root root = createQuery.from(Customer.class);         //降序排序          createQuery.select(root);//        Order order = criteriaBuilder.desc(from.get("cust_id"));//        createQuery.orderBy(order);         createQuery.orderBy(criteriaBuilder.desc(root.get("cust_id")));         //4. 将查询条件设置到where方法中         //5. 通过session执行查询         List list = session.createQuery(createQuery).list();        for (Customer customer : list) {            System.out.println(customer);        }    }4.0 分页查询

    @Test    /**     *      * @Title: demo3     * @Description: 分页查询     * @param     * @return void     * @throws     *     */    public void demo3() {        Session session = HibernateUtils.getCurrentSession();        Transaction transaction = session.beginTransaction();        // 排序查询        CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();        // 1. 获取CriteriaQuery对象        CriteriaQuery createQuery = criteriaBuilder.createQuery(LinkMan.class);        // 方法1:// int pageIndex = 11;// int pageSize = 10;// List list =// session.createQuery(createQuery).setFirstResult(pageIndex).setMaxResults(pageSize).list();// 方法2        // 要查询对象的实体,可以理解为需要查询的表        Root root = createQuery.from(LinkMan.class);        TypedQuery typedQuery = session.createQuery(createQuery);        int pageIndex = 11;        int pageSize = 10;        // 设置分页        typedQuery.setFirstResult(pageIndex);        typedQuery.setMaxResults(pageSize);        List list = typedQuery.getResultList();        for (LinkMan linkMan : list) {            System.out.println(linkMan);        }        transaction.commit();    }5.0 条件查询

CriteriaBuilder 中各个方法的对应 equle : filed = value gt / greaterThan : filed > value lt / lessThan : filed = value le / lessThanOrEqualTo: filed  gt         * >= ge         * < lt         *
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

风中影子_cf02

新手猿

  • 主题

    7

  • 帖子

    7

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆