• 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】

  • 相关阅读:
    bedtools神器 | gtf转bed | bed文件运算
    常识的力量
    Introduction to dnorm, pnorm, qnorm, and rnorm for new biostatisticians
    最大似然估计实例 | Fitting a Model by Maximum Likelihood (MLE)
    (转)从最大似然估计开始,你需要打下的机器学习基石
    highly variable gene | 高变异基因的选择 | feature selection | 特征选择
    用R的igraph包来画蛋白质互作网络图 | PPI | protein protein interaction network | Cytoscape
    从fasta中提取或者过滤掉多个序列
    GenomicConsensus (quiver, arrow)使用方法 | 序列 consensus
    blast | diamond 输出结果选择和解析 | 比对
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/7300392.html
Copyright © 2020-2023  润新知