zoukankan      html  css  js  c++  java
  • hibernate DetachedCriteria 子查询对应sql的in语句

    需要从两个关联进行数据查询。找了一下午,可算找到个能看懂的 

    原文链接:http://blog.sina.com.cn/s/blog_ba1bed340101lvx1.html


    从数据库查询的sql语句如下:

    select * from bdorder where Id in (select DISTINCT details from orderDetail  "
    					+ "where detailStatus like '%3N') "
    					+ "and status like '%3Y'
    

    项目中使用的是hibernate框架。

    使用到criteria ,DetachedCriteria 单个表用的时候那是相当方便,第一次多表查询,就有点蒙了,

    首先是单个表的查询

     1 order实体
     2 
     3 //对order表进行查询
     4 //初始化criteria
     5 DetachedCriteria criteria = DetachedCriteria.forClass(BDOrder.class);
     6 
     7 //给criteria添加条件,引号中status为实体中的字段,后一个为值
     8 criteria.add(Restrictions.like("status", states));
     9 
    10 //添加多个条件。有多少加多少。
    11 ...
    12 ...
    13 
    14 //查找结果。
    15 List<BDOrder> orderList = this.getHibernateTemplate().findByCriteria(criteria);

    两个表的查询,实现最开始的sql语句

     1 BDOrder 实体和 BDOrderDetail 实体
     2 DetachedCriteria criteria = DetachedCriteria.forClass(BDOrder.class);
     3 
     4 //添加查询条件
     5 criteria.add()
     6 
     7 //初始化BDOrderDeaila 的criterial
     8 DetachedCriteria criteriaDetail = DetachedCriteria.forClass(BDOrderDetail.class);
     9 
    10 //添加OrderDetail实体的查询条件
    11 criteriaDetial.add(Restrictions.like("detailStatus", "%3N"))
    12 
    13 //设置这个表的查询结果。注意details为实体映射文件中对应的字段,不是数据库中的列名
    14 criteriaDetail.setProjection(Property.forName("details "));
    15 
    16 //设置去除查询结果中的重复数据
    17 criteriaDetail.setResultTransformer(criteriaDetail.DISTINCT_ROOT_ENTITY);
    18 
    19 
    20 //关联两个实体的关系
    21 criteria.add(Property.forName("id").in(criteriaDetail));
    22 
    23 
    24 //然后直接使用criteria去查询就可以了。
    25 //查找结果。
    26 List<BDOrder> orderList = this.getHibernateTemplate().findByCriteria(criteria);
    27 
    28 //以上可以实现最开始的那句sql,

      顺便复习一下Restrictions的用法:

    方法

    说明

    Restrictions.eq

    Restrictions.allEq

    利用Map来进行多个等于的限制

    Restrictions.gt

    Restrictions.ge

    >=

    Restrictions.lt

    Restrictions.le

    <=

    Restrictions.between

    BETWEEN

    Restrictions.like

    LIKE

    Restrictions.in

    in

    Restrictions.and

    and

    Restrictions.or

    or

    Restrictions.sqlRestriction

    用SQL限定查询

  • 相关阅读:
    使用 requests 维持会话
    使用 requests 发送 POST 请求
    使用 requests 发送 GET 请求
    requests 安装
    使用 urllib 分析 Robots 协议
    使用 urllib 解析 URL 链接
    使用 urllib 处理 HTTP 异常
    使用 urllib 处理 Cookies 信息
    使用 urllib 设置代理服务
    按单生产程序发布
  • 原文地址:https://www.cnblogs.com/zhangkaikai/p/6679371.html
Copyright © 2011-2022 走看看