zoukankan      html  css  js  c++  java
  • QBC查询

    -----------------siwuxie095

       

       

       

       

       

       

       

       

    QBC 查询

       

       

    1、QBC,即 Query By Criteria,它是 Hibernate 提供

    的另一种查询方式

       

       

       

    2、使用 HQL 查询需要写 hql 语句,但使用 QBC 查询

    不需要写语句,直接使用方法实现

       

       

       

    3QBC 操作的是实体类属性

       

       

       

    4、使用 Criteria 对象实现 QBC 查询

       

       

       

       

       

    基本查询

       

       

    以客户和联系人为例(一对多),下同

       

       

    1、查询所有记录

       

    1)创建 Criteria 对象

       

    2)调用 Criteria 对象的方法得到结果

       

       

       

    2、具体实现

       

       

       

    /*

    * (1) 创建 Criteria 对象

    *

    * 调用 session createCriteria() 方法,参数是

    * 实体类的 class,返回值是 Criteria 类型,创建以

    * 接收

    */

    Criteria criteria=session.createCriteria(Customer.class);

    /*

    * (2) 调用方法得到结果

    *

    * 调用 criteria list() 方法,返回值是 List

    * 型,创建以接收

    */

    List<Customer> list=criteria.list();

       

       

       

       

       

    条件查询

       

       

    1、具体实现

       

    1)多条件查询

       

       

       

       

       

    /*

    * (1) 创建 Criteria 对象

    *

    * 调用 session createCriteria() 方法,参数是

    * 实体类的 class,返回值是 Criteria 类型,创建以

    * 接收

    */

    Criteria criteria=session.createCriteria(Customer.class);

    /*

    * (2) 使用 criteria 的方法设置条件

    *

    * 调用 criteria add() 方法,设置条件值,

    * 类似于 HQL where cid=? and custName=?

    */

    criteria.add(Restrictions.eq("cid", 1));

    criteria.add(Restrictions.eq("custName", "百度"));

    /*

    * (3) 调用方法得到结果

    *

    * 调用 criteria list() 方法,返回值是 List

    * 型,创建以接收

    */

    List<Customer> list=criteria.list();

       

       

    2)模糊查询

       

       

       

       

       

    /*

    * (1) 创建 Criteria 对象

    *

    * 调用 session createCriteria() 方法,参数是

    * 实体类的 class,返回值是 Criteria 类型,创建以

    * 接收

    */

    Criteria criteria=session.createCriteria(Customer.class);

    /*

    * (2) 使用 criteria 的方法设置条件

    *

    * 调用 criteria add() 方法,设置条件值,

    * 类似于 HQL where custName like ?

    */

    criteria.add(Restrictions.like("custName", "%%"));

    /*

    * (3) 调用方法得到结果

    *

    * 调用 criteria list() 方法,返回值是 List

    * 型,创建以接收

    */

    List<Customer> list=criteria.list();

       

       

       

       

       

    排序查询

       

       

    1、具体实现

       

       

       

       

       

    /*

    * (1) 创建 Criteria 对象

    *

    * 调用 session createCriteria() 方法,参数是

    * 实体类的 class,返回值是 Criteria 类型,创建以

    * 接收

    */

    Criteria criteria=session.createCriteria(Customer.class);

    /*

    * (2) 设置对哪个属性进行排序以及排序规则

    */

    criteria.addOrder(Order.asc("cid"));

    /*

    * (3) 调用方法得到结果

    *

    * 调用 criteria list() 方法,返回值是 List

    * 型,创建以接收

    */

    List<Customer> list=criteria.list();

       

       

       

       

       

    分页查询

       

       

    1、具体实现

       

       

       

       

       

       

    /*

    * (1) 创建 Criteria 对象

    *

    * 调用 session createCriteria() 方法,参数是

    * 实体类的 class,返回值是 Criteria 类型,创建以

    * 接收

    */

    Criteria criteria=session.createCriteria(Customer.class);

    /*

    * (2) 设置分页数据

    *

    * 开始位置和每页的记录数

    */

    criteria.setFirstResult(0);

    criteria.setMaxResults(10);

    /*

    * (3) 调用方法得到结果

    *

    * 调用 criteria list() 方法,返回值是 List

    * 型,创建以接收

    */

    List<Customer> list=criteria.list();

    /*

    * 开始位置计算公式:(当前页 - 1) * 每页记录数

    */

       

       

       

       

       

    统计查询

       

       

    1、具体实现

       

       

       

       

       

       

    /*

    * (1) 创建 Criteria 对象

    *

    * 调用 session createCriteria() 方法,参数是

    * 实体类的 class,返回值是 Criteria 类型,创建以

    * 接收

    */

    Criteria criteria=session.createCriteria(Customer.class);

    /*

    * (2) 设置操作

    */

    criteria.setProjection(Projections.rowCount());

    /*

    * (3) 调用方法得到结果

    *

    * 调用 criteria uniqueResult() 方法,返回值是

    * Object 类型,创建以接收

    */

    Object obj=criteria.uniqueResult();

    /*

    * 注意:不能直接把 obj 转成 int 类型,需要先转成

    * Long 类型

    *

    * Long val=(Long) obj;

    * int valx=val.intValue();

    */

       

       

       

       

       

    离线查询

       

       

    1、离线查询

       

    也称离线条件查询,可以脱离 Session 而对条件进行封装

       

       

       

    2、应用场景

       

    Servlet 调用 Service,Service 调用 DAO

       

       

    一般情况下,参数往往是从 Web 层传到业务层,进而传到 DAO

    层,最后在 DAO 层中拼接 SQL 完成查询

       

    有了离线查询后,就可以直接在 Web 层将数据封装好,传到业务

    层,进而传到 DAO 层完成查询

       

       

       

    3、使用 DetachedCriteria 对象实现离线条件查询

       

       

       

    4、具体实现

       

       

       

       

       

    /*

    * (1) 创建 DetachedCriteria 对象(离线对象)

    *

    * 调用 DetachedCriteria forClass() 静态方法,

    * 参数是实体类的 class,返回值是 DetachedCriteria

    * 类型,创建以接收

    */

    DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Customer.class);

    /*

    * (2) 最终执行时才需要 Session

    *

    * 调用 detachedCriteria getExecutableCriteria()

    * 方法,返回值是 Criteria 类型,创建以接收

    */

    Criteria criteria=detachedCriteria.getExecutableCriteria(session);

    /*

    * (3) 调用方法得到结果

    *

    * 调用 criteria list() 方法,返回值是 List

    * 型,创建以接收

    */

    List<Customer> list=criteria.list();

       

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    Java数组的使用
    Java的栈堆以及数组两种不同类型的定义
    Java数组声明的创建
    JAVA递归
    Java可变参数
    Java方法(类--------对象--------方法)
    html块元素和内联元素的区别
    HTML基础介绍
    CSS网页美化元素属性介绍
    ArrayList类的remove(Object o)方法简述
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/7300392.html
Copyright © 2011-2022 走看看