细说QBC:
QBC(Query By Criteria) 查询:这种方式比较面向对象方式,因为是面向对象,所以查询时参数名就是所查询的类的属性名并不是数据库的表的列名
重点是有三个描述条件的对象:Restrictions,Order,Projections。
使用QBC查询,一般需要以下三个步骤:
 1. 使用Session实例 的createCriteria()方法创建Criteria对象 ,
 2. 并使用add()方法添加设置查询条件,工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。
 3. 使用Criteria对象的list()方法进行查询并返回结果

代码示例:

    @Test
public void TestQBCQuery(){
Criteria criteria=session.createCriteria(Employee.class);//1创建一个criteria
criteria.add(Restrictions.gt("salary",4000F))//2使用add()添加查询条件
.addOrder(Order.desc("salary"))
.setProjection(Projections.count("dept"));//这里是访问数据库表里的DEPT_ID字段,所以直接写类里的dept属性即可,不能写表的列名下去
          //设置了projections对象后返回的只是projections设置的条件,并不是返回employee对象给我,?
List<Employee> result=criteria.list();//使用list()方法执行查询语句,并返回结果
for(Employee emps:result){
System.out.print(emps.getId()+" ");
System.out.println(emps.getName()+" "+emps.getSalary()); }
}

QBC检索重要的三个类

 Restrictions类的常用方法:返回类型为Criterion,作为查询容器的参数
方法名称         描述              使用
Restrictions.eq           等于              Restrictions.eq(String propertyName,Object value)
Restrictions.allEq     使用Map,Key/Valu进行多个等于的比对     Restrictions.allEq(Map propertyNameValues)
Restrictions.gt(greater than)    大于                 Restrictions.gt(String propertyName, Object value)
Restrictions.ge(greater equal) 大于等于                Restrictions.ge(String propertyName, Object value)
Restrictions.lt(less than)     小于                Restrictions.It(String propertyName, Object value)
Restrictions.le(less equal)     小于等于                Restrictions.Le(String propertyName, Object value)
Restrictions.between    对应SQL的between              Restrictions.between(String propertyName, Object lo, Object hi)
Restrictions.like 对应SQL的like             Restrictions.like(String propertyName, Object value)
Restrictions.in      对应SQL的in              Restrictions.in(String propertyName, Collection value)
Restrictions.and        and关系                Restrictions.and(Criterion lhs, Criterion rhs)
Restrictions.or         or关系                Restrictions.or(Criterion lhs, Criterion rhs)
Restrictions.sqlRestriction SQL限定查询                Restrictions.sqlRestriction(String sql,Object[] values,Type[] types)
 Order类的常用方法:作为查询容器的参数
方法名称     描述   使用
Order.asc    升序    Order.asc(String propertyName)
Order.desc   降序    Order.desc(String propertyName)
 Projections类的常用方法:作为查询容器的参数
方法名称               描述             使用
Projections.avg         求平均值           Porjections.avg(String propertyName)
Projections.count          统计某属性的数量     Projections.count(String propertyName)
Projections.countDistinct     统计某属性不同值的数量 Projections.countDistinct(String propertyName)
Projections.groupProperty    指定某个属性为分组属性    Projections.groupProperty(String propertyName)
Projections.max         求最大值          Projections.max(String propertyName)
Projections.min        求最小值          Projections.min(String propertyName)
Projections.projectionList     创建一个ProjectionList对象 Projections.projectionList()
Projections.rowCount      查询结果集中的记录条数 Projections.rowCount()
Projections.sum        求某属性的合计        Projections.sum(String propertyName)

本地SQL检索:是面向数据库的,所以检索的属性一定是数据库的表名或者是表的字段,不是对象类名或者属性名,

但是在Hibernate中不推荐使用本地SQL语句的查询,因为本地SQL语句的查询会使程序不稳定,无法自由的移植数据库。因为各个数据库虽然有统一的SQL标准,但是各个数据之间又有很多的自身的扩展,造成SQL语句不兼容,导致程序功能的不稳定。
本地SQL检索示例:
1取得query对象 session.createSQLQuery(sql)
2添加查询条件   .setString("TableFiledName",“value”)
3执行查询语句并返回结果   .executeUpdate();
代码示例:

@Test
public void testNativeSQL(){
String sql = "INSERT INTO gg_department VALUES(?, ?)";
Query query = session.createSQLQuery(sql); query.setInteger(0, 280)
.setString(1, "ATGUIGU")
.executeUpdate();
}

QBC检索和本地SQL检索的更多相关文章

  1. [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Hibernate(十五):QBC检索、本地SQL检索和HQL删除

    QBC检索 QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口. 1)通过Cr ...

  3. Hibernate之QBC检索和本地SQL检索

    QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口 本地SQL查询来完善HQL ...

  4. hibernate检索方式(HQL 检索方式,QBC 检索方式,本地 SQL 检索方式)

    hibernate有五种检索方式,这儿用 单向的一对多的映射关系 例子,这儿有后三种的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 ...

  5. Hibernate之QBC查询与本地SQL查询

    1. QBC查询:     QBC 查询就是通过使用Hibernate提供的QueryByCriteria API 来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口 ...

  6. Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)

    1.非集成Spring hibernate的检索方式,主要有以下五种. 1.导航对象图检索方式.(根据已经加载的对象,导航到其他对象.) 2.OID检索方式.(按照对象的OID来检索对象.) 3.HQ ...

  7. 【VBS】检索Outlook本地邮箱

    实现功能:使用VBS检索Outlook本地邮箱中,今天是否收到某标题的邮件. 代码如下: ' yyyy-m-d 0:00 AM ' yyyy-m-d 11:59 PM Function CheckMa ...

  8. 【SQL必知必会笔记(2)】检索数据、排序检索数据

    上个笔记中介绍了一些关于数据库.SQL的基础知识,并且创建我们后续练习所需的数据库.表以及表之间的关系,从本文开始进入我们的正题:SQL语句的练习. 文章目录 1.检索数据(SELECT语句) 1.1 ...

  9. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

随机推荐

  1. Java 枚举(enum) 的常见用法和开发规范

    JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static final ...

  2. Selenium - 设置元素等待

    一.sleep () 休眠方法   --time 固定等待 在开发自动化框架过程中,最忌讳使用Python自带模块的time的sleep方法进行等待,虽然可以自定义等待时间,但当网络条件良好时, 依旧 ...

  3. 每日英语:Online Education a New Frontier in China

    In a country as obsessed with education as China, it makes sense that online teaching has huge poten ...

  4. 喵神 onevcat 的直播首秀

    喵神 onevcat 的直播首秀   王巍在圈内人称喵神,我和他在网上很早就认识,平时多有交流.在我眼中,他是一个幽默风趣高手.虽然他的博客中主要内容是 iOS 开发,但是他实际上涉及的技术领域还包括 ...

  5. 虚拟机下安装centos7方法,修改系统语言为简体中文的方法

    说明 自己装系统时一般都可以自定义选择系统语言.可是云端服务器一般都是安装好的镜像,默认系统语言为英文,对于初学者可能还会有搞不懂的计算机词汇.这里简单说一下centos7怎么修改系统语言为中文. 虚 ...

  6. oracle 使用occi方式插入数据时中文乱码

    这个是由于数据库的编码格式和我们输入的编码格式不一致导致的. 我们使用c++插入数据时数据库的中文显示??(即乱码),但同样的数据使用navicat进行插入却显示正常. 因此,问题并不是处在服务器端的 ...

  7. lua工具库penlight--08额外的库(二)

    执行一系列的参数 类型说明符也可以 是' ('MIN '..' MAX)' 的形式. local lapp = require 'pl.lapp' local args = lapp [[ Setti ...

  8. 《高性能MySQL》读书笔记(1)

    慢查询 当一个资源变得效率低下的时候,应该了解一下为什么会这样.有如下可能原因:1.资源被过度使用,余量已经不足以正常工作.2.资源没有被正确配置3.资源已经损坏或者失灵 因为慢查询,太多查询的实践过 ...

  9. RegisterStartupScript 后退重复提示解决方法

    我在后台调用RegisterStartupScript注册脚本,提示用户是否要跳转到另外一个页面,可是问题就来了,跳转到另外一个页面后,一旦用户后退,原来的页面就会又提示脚本信息, 后来自己想了想,用 ...

  10. setTranslatesAutoresizingMaskIntoConstraints和setFrame组合使用导致的异常

    在用Ojbect-c开发OSX应用的时候需要用到自定义控件并用代码进行布局,很自然地就使用了setTranslatesAutoresizingMaskIntoConstraints和setFrame组 ...