本文章适合一些初学者

一、使用Criteria查询数据
        1.条件查询
            1.1:使用Criteria查询的步骤
                    1.使用Session接口的creatCriteria()方法创建Criteria对象
                    2.使用Restrictions类提供的静态方法设置条件,这些静态方法返回Criterion对象,一个
                        Criterion对象代表一个查询条件,Criteria接口的add()方法用来添加查询方法
                    3.使用Criteria接口的list()方法执行查询语句,list()方法返回java.util.List类型的
                        结果,List集合中每个元素都是持久化对象
                        eg:(1) 使用Criteria查询所有的部门
                                Criteria criteria = session.createCriteria(Dept.class).list();
                            (2) 查询部门在“西一区”的部门
                                Criteria criteria = session.createCriteria(Dept.class).add(Restrictions.eq("location","西一区")).list();
                            (3) add(Restrictions.eq("location","西一区")).ignoreCase();     
                                        ignoreCase():表示 不区分大小写
                                        
            1.2:HQL和Criteria支持的比较运算
            
            ----------------------------------------------------------------------------------------
            HQL运算符            Criteria运算方法                                            说明
            ----------------------------------------------------------------------------------------
            =            SimpleExpression Restrictions.eq(String propertyName,Object value)   等于
            ----------------------------------------------------------------------------------------
            <>            SimpleExpression Restrictions.ne(String propertyName,Object value)   不等于
            ----------------------------------------------------------------------------------------
            >            SimpleExpression Restrictions.gt(String propertyName,Object value)   大于
            ----------------------------------------------------------------------------------------
            >=            SimpleExpression Restrictions.ge(String propertyName,Object value)   大于等于
            ----------------------------------------------------------------------------------------
            <            SimpleExpression Restrictions.lt(String propertyName,Object value)   小于
            ----------------------------------------------------------------------------------------
            <=            SimpleExpression Restrictions.le(String propertyName,Object value)   小于等于
            ----------------------------------------------------------------------------------------
            is null        Criterion Restrictions.isNull(String propertyName)                    等于空值
            ----------------------------------------------------------------------------------------
            is not null        Criterion Restrictions.isNotNull(String propertyName)            非空值
            ----------------------------------------------------------------------------------------
            
            1.3:HQL和Criteria支持的范围运算
            
            ----------------------------------------------------------------------------------------
            HQL运算符            Criteria运算方法                                            说明
            ----------------------------------------------------------------------------------------
            in(列表)    Criterion Restrictions.in(String propertyName,Collection values)
                        或Criterion Restrictions.in(String propertyName,Object[] values)    等于列表中的某一个值
            ----------------------------------------------------------------------------------------
            not in(列表)  Criterion Restrictions.not(Restrictions.in())                        不等于列表中的任意一个值
            ----------------------------------------------------------------------------------------
            between 值1 and 值2   Criterion Restrictions.between(String propertyName,Object lo,Object hi)  大于等于值1并且小于值2
            ----------------------------------------------------------------------------------------
            not between 值1 and 值2   Criterion Restrictions.not(Restrictions.between())  小于值1并且大于值2
            
            
            1.4:HQL和Criteria支持的字符串模式匹配
            
            ----------------------------------------------------------------------------------------
            HQL运算符            Criteria运算方法                                            说明
            ----------------------------------------------------------------------------------------
                    |SimpleExpression Restrictions.like(String propertyName,Object value)
                    |或                                                                                字符串模式匹配
                    |SimpleExpression Restrictions.like(String propertyName,Object value,MatchMode
                    |    matchMode)
                    |-------------------------------------------------------------------------------
            like    |Criterion Restrictions.ilike(String propertyName,Collection values)
                    |或                                                                                字符串模式匹配,同时忽略大小写
                    |Criterion Restrictions.in(String propertyName,String value,MatchMode matchMode)
                    |
            ----------------------------------------------------------------------------------------
            
            1.5:MatchMode类的静态常量
            
            ----------------------------------------------------------------------------------------
            模式                  举例                                                    说明
            ----------------------------------------------------------------------------------------
            MatchMode.Start         Restrictions.like("empName","s",MatchMode.start)        员工姓名以“s”开头
            ----------------------------------------------------------------------------------------
            MatchMode.end         Restrictions.end("empName","s",MatchMode.end)        员工姓名以“s”结尾
            ----------------------------------------------------------------------------------------
            MatchMode.anywhere    Restrictions.anywhere("empName","s",MatchMode.anywhere)    员工姓名中包含“s”
            ----------------------------------------------------------------------------------------
            MatchMode.exact       Restrictions.anywhere("empName","s",MatchMode.exact)    员工姓名中等于“s”,精确匹配
            ----------------------------------------------------------------------------------------
            
            1.6:HQL和Criteria支持的逻辑方法
            
            ----------------------------------------------------------------------------------------
            HQL运算符            Criteria运算方法                                            说明
            ----------------------------------------------------------------------------------------
            and         LogicalExpression Restrictions.and(Criterion lhs,Criterion rhs)     逻辑与
            ----------------------------------------------------------------------------------------
            or             LogicalExpression Restrictions.or(Criterion lhs,Criterion rhs)
                        或Disjunction Restritions.disjunction()                                逻辑或
            ----------------------------------------------------------------------------------------
            not         Criterion Restrictions.not(Criterion expression)                    逻辑非
            
            1.7:HQL和Criteria支持的集合运算
            
            ----------------------------------------------------------------------------------------
            模式                  举例                                                    说明
            ----------------------------------------------------------------------------------------
            is empty    Criterion Restritions.isEmpty(String properName)        集合为空,不包含任何元素
            ----------------------------------------------------------------------------------------
            is not empty   Criterion Restritions.isNotEmpty(String properName)        集合不为空
            
        2.动态查询(封装条件类)

二、排序、分页及关联   .addOrder(Order.asc("salary")).list();
        
        排序:    eg: List<Emp> list = session.createCriteria(Emp.class).add(Restrictions.gt("salary",4000D))
                            .addOrder(Order.asc("salary")).list();
        分页:    eg: List<Emp> list = session.createCriteria(Emp.class).add(Restrictions.gt("salary",4000D))
                            .addOrder(Order.asc("salary")).setFirstResult(0).setMaxResult(2).list();
三、查询唯一对象
        Query和Criteria接口执行查询语句的方法
        ------------------------------------------------------------------------------------------------
        方法                   说明                                  Query接口              Criteria接口
        ------------------------------------------------------------------------------------------------
        List list()            返回List集合                             支持                    支持
        ------------------------------------------------------------------------------------------------
        Iterator iterate()    返回Iterator迭代器,只查询出ID值         支持                    不支持
        ------------------------------------------------------------------------------------------------
        Object uniqueResult    返回唯一对象                             支持                    支持
        ------------------------------------------------------------------------------------------------
        
        eg: Emp emp = session.createCriteria(Emp.class).add(Restrictions.gt("salary",4000D))
                            .addOrder(Order.asc("salary")).uniqueResult();
四、连接查询
        1.Criteria查询和HQL查询都支持连接查询,Criteria只支持内连接和迫切左外连接
        
        2.Criteria接口提供了createCriteria()和createAlias()方法建立内连接
            createCriteria():  输出姓名包括“a”的员工
                        eg:List<Emp> list = session.createCriteria(Emp.class).add(Restrictions.ilike("empName","a",MatchMode.anywhere))
                                .createCriteria("dept").list();
            createAlias():输出姓名包括“a”的员工
                        eg:eg:List<Emp> list = session.createCriteria(Emp.class).add(Restrictions.ilike("empName","a",MatchMode.anywhere))
                                .createAlias("dept").list();
        3.Criteria接口提供了setFetchMode()方法来设置迫切左外连接
                    查询位置在“西一区”的部门及其员工人数
                        eg:List<Dept> list = session.createCriteria(Dept.class,"d").setFetchMode("emps",FetchMode.Join)
                                .add(Restrictions.eq("d.location","西一区").ignoreCase()).list();
五、投影分组及DetachedCriteria
        1.使用投影和分组
            1.1:查询1个的属性 使用Criteria接口的setProjection()方法来设置投影属性
                        eg:List<String> list = session.createCriteria(Dept.class).setProjection(
                                    Property.forName("deptName")).list();
            1.2: 查询2个以上的属性。需要使用Projections的projectionList()方法
                        eg:List<Object[]> list = session.createCriteria(Emp.class).setProjection(
                                    Propertions.projectionList().add(Property.forName("empName"))
                                                                .add(Property.forName("hiredate"))
                                ).list();
            
            1.3:Projections常用聚合查询方法
                    ------------------------------------------------------------------------------
                                方法                                                        说明
                    ------------------------------------------------------------------------------
                    PropertyProjection Projections.groupProperty(String propertyName)       分组
                    ------------------------------------------------------------------------------
                    Projection Projections.rowCount()                                        统计记录数
                    ------------------------------------------------------------------------------
                    AggregateProjection Projections.avg(String propertyName)                统计平均值
                    ------------------------------------------------------------------------------
                    AggregateProjection Projections.max(String propertyName)                统计最大值
                    ------------------------------------------------------------------------------
                    AggregateProjection Projections.min(String propertyName)                统计最小值
                    ------------------------------------------------------------------------------
                    CountProjection Projections.count(String propertyName)                统计某一段的非空记录数
                    ------------------------------------------------------------------------------
                    AggregateProjection Projections.sum(String propertyName)                针对某一字段求和
                    ------------------------------------------------------------------------------
                    
                    eg:List<Object[]> list = session.createCriteria(Emp.class,"e").createAlias("e.dept","d").
                                                    setProjection(
                                                        Projections.projectionList()
                                                            .add(Projections.groupProperty("d.deptName"))
                                                            .add(Projections.avg("e.salary"))
                                                            .add(Projections.max("e.salary"))
                                                            .add(Projections.min("e.salary"))
                                                    ).list();
        
        2.使用DetachedCriteria(DetachedCriteria创建时不需要Session对象而Criteria是由Session对象创建的)
            2.1:什么时候使用DetachedCriteria查询:在常规的Web编程中,有大量的动态查询
               
                使用DetachedCriteria查询财务部的姓名包括“a”的员工
                        eg:DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Emp.class,"e")
                                                                    .createAlias("d.dept","d")
                                                                    .add(Restrictions.eq("d.deptName","财务部"))
                                                                    .add(Restrictions.ilike("e.empName","a",
                                                                        MatchMode.anywhere));
                            List<Emp> list = detachedCriteria.getExecutableCriteria(session).list();

Hibernate框架Criteria查询的更多相关文章

  1. Hibernate框架的查询方式

    技术分析之Hibernate框架的查询方式        1. 唯一标识OID的检索方式        * session.get(对象.class,OID)    2. 对象的导航的方式       ...

  2. (补充)10.Hibernate框架的查询方式

    技术分析之Hibernate框架的查询方式 1. 唯一标识OID的检索方式 * session.get(对象.class,OID) 2. 对象的导航的方式 3. HQL的检索方式 * Hibernat ...

  3. hibernate框架之-查询结果集返回类型

    Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式. 开发中用Hibernate进行数据库查询,用的是SQL.原来需要查询一个表的几乎所有字段,所以我使用了addE ...

  4. Hibernate框架进阶(下篇)之查询

    导读 Hibernate进阶篇分为上中下三篇,本文为最后一篇,主要内容是Hibernate框架的查询,主要包括hql语句查询,criteria查询以及查询策略的选择. 知识框架 Hibernate查询 ...

  5. 框架之 hibernate之各种查询

    1. Hibernate的查询方式 2. Hibernate的查询策略 案例:使用Hibernate完成查询所有联系人功能 需求分析 1. 完成所有的联系人的查询 技术分析之Hibernate框架的查 ...

  6. Hibernate框架的第四天

    ## Hibernate框架的第四天 ## ---------- **回顾:Hibernate框架的第三天** 1. 一对多关联关系映射 * JavaBean的编写 * 编写映射的配置文件 * 使用级 ...

  7. Hibernate框架第二天

    ### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为 ...

  8. Android数据库hibernate框架

    说明 /** * YDL_Hibernate总结 <br/> * (一)支持功能: 1.自己主动建表,支持属性来自继承类:可依据注解自己主动完毕建表,而且对于继承类中的注解字段也支持自己主 ...

  9. hibernate的面向对象查询的效率有多低?

    前言 老平台的查询速度很慢,需要进行优化(...说白了就是优化sql语句),老平台用的strus2+hibernate框架,查询基本都是使用的HSQL. 关于hsql HQL是Hibernate Qu ...

随机推荐

  1. UITextField 之 手势收起键盘

    1. 注册手势 /** * 注册手势 */ -(void)gestureReg{ //放弃第一响应者 UITapGestureRecognizer * tap = [[UITapGestureReco ...

  2. 分布式cookie-session的实现(spring-session)

    分布式cookie-session的实现(spring-session) 本文使用的spring-session版本为 1.0.0,地址为: https://github.com/spring-pro ...

  3. CentOS7 部署 tomcat

    1. 准备tomcat账号 本着最小权限原则,新建账号来安装tomcat. 命令:useradd , passwd 2. 配置防火墙 2.1. tomcat.xml 在/etc/firewalld/s ...

  4. html标签默认样式整理

    引:http://www.jb51.net/web/94964.html 文为大家整理了html标签默认样式属性及浏览器默认样式等等,喜欢css布局的朋友们可以学下,希望对大家有所帮助 html, a ...

  5. Android4.0新增的网格布局

    网格布局由GridLayout代表,它是Android 4.0新增的布局管理器,因此需要在Android 4.0 之后的版本中才能使用该布局管理器.如果希望在更早的Android平台上使用该布局管理器 ...

  6. 大型网站制作前端使用PHP后台逻辑用 Java

    对于网站团队,大概可以按照职责分为前端.后端.架构三种角色. 前端:负责所有和用户有交互的产品,包括 WEB以及手机客户端 后端:负责各种业务 API 的开发,以及服务器端其他系统的开发 架构:负责设 ...

  7. Canvas贝塞尔二级曲线

    当前点到控制点,控制点到末尾点的两个连线,与这两个连线相切:<!DOCTYPE html> <html lang="en"> <head> &l ...

  8. Apriori算法原理总结

    Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策.比如在常见的超市购物数据集,或者电商的网购数据集中,如果我们找到了 ...

  9. 关于OI本地简易评测姬3.0发布的通知

    本辣鸡蒟蒻的OI本地评测姬3.0出炉辣.[由wjc大蒟蒻编写,rxb神犇秒秒钟搞出编译器命令行,解决了评测姬编译一大难关并便携化,也为评测姬设计提出了宝贵的建议],目前支持pas和cpp(本辣鸡错了, ...

  10. Java如何判断字符串中包含有全角,半角符号

    首先介绍下全角跟半角之间的区别: 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角" ...