文档章节

hibernate动态条件高级查询criteria

吕兵阳
 吕兵阳
发布于 2014/03/25 11:30
字数 318
阅读 221
收藏 0

我们知道,我们在做项目时候,用到的最多的无非就是查询,各种条件查询.这个时候,如果我们再采用纯粹的hql语句来通过if判断的话,效率就十分低下而且会有很多判断.

那么,hibernate在3以后,推出了一个很有意义的对象DetachedCriteria,通过这个类,我们可以得到Criteira对象.然后可以利用Restrictions,Projection等,构造各种条件.

而且支持多表连接,外键关联查询,忽略大小写等.很实用.

DetachedCriteria dc = DetachedCriteria.forClass(Employee.class);
        Criteria cri = dc.getExecutableCriteria(getSession());
        cri.createAlias("department", "department");
        if (currEmp.getRole().getRoleId() == FinalVariable.SIMPLE_RID) {
            cri.add(Restrictions.eq("empId", currEmp.getEmpId()));
        } else if (currEmp.getRole().getRoleId() == FinalVariable.DEP_MANAGER_RID) {
            if (emp != null) {
                if (emp.getEmpId() != null) {
                    cri.add(Restrictions.eq("empId", emp.getEmpId()));
                }
            }
            cri.add(Restrictions.eq("department.depId", currEmp.getDepartment()
                    .getDepId()));
        } else {
            if (emp != null) {
                if (emp.getEmpId() != null) {
                    cri.add(Restrictions.eq("empId", emp.getEmpId()));
                } else if (emp.getDepartment().getDepId() != null) {
                    cri.add(Restrictions.eq("department.depId", emp
                            .getDepartment().getDepId()));
                }
            }
            cri.addOrder(Order.asc("department.depId"));
        }
        return cri.list();

下面贴上,我自己写的一个小例子: 其中,员工里面有个Department引用.这个时候如果我们想用department下面的depId,我们需要使用criteria的 createAlias("","");方法,首先创建一个别名,这样就可以用外键去关联查询了,发送的sql语句都是关联的查询.很方便

© 著作权归作者所有

吕兵阳
粉丝 94
博文 276
码字总数 105376
作品 0
郑州
后端工程师
私信 提问
Hibernate高级查询

@Test DDL创建表 hibernate标准化对象查询(QBC) 也即是把查询条件封装成一个对象,它支持运行时动态生成查询语句 Criteria接口 存放查询条件的容器 Critertion接口 代表一个查询条件,可以...

嘿嘿!!
2016/09/16
0
0
Hibernate QBC查询

转载自iteye的iorit2003博客 QBC查询: QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口。我们看...

hlyton
2013/08/28
0
0
【hibernate criteria】hibernate中criteria的完整用法 转

---恢复内容开始--- 转自:http://www.360doc.com/content/090313/10/26262_2794855.html 1、Criteria   Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Cr......

angel挤一挤
2016/07/22
0
0
Hibernate - DetachedCriteria 的完整用法

现在对 Hibernate的Criteria 的用法进行总结: Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。 Criteria 和 DetachedCriteria...

heroShane
2014/03/05
16.1K
0
Hibernate Criteria 用法

Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在...

chailink
2013/07/20
186
1

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
4
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
7
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部