hibernate 查询方式有哪些?_第2页回答

2021-04-14 18:49发布

17条回答
嘿呦嘿呦拔萝卜
2楼 · 2021-04-16 16:58

这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections。使用QBC查询,一般需要以下三个步骤 (只有"DetachedCriteria离线查询"不同, 详见示例) :

  • 使用Session实例的createCriteria(XXX.class)方法创建Criteria对象;

  • 使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组;

  • 使用Criteria对象的list()方法进行查询并返回结果。


我的网名不再改
3楼 · 2021-04-17 15:29

Hibernate有五种常见的查询方式:

(1)NativeSQL 是运用数据库本身提供的数据查询语言进行查询,这种方式查询效率高,与数据库耦合性高依赖于具体的数据库。因为不同的数据库厂商提供的查询语言会存在某些细微差别。

(2)HQL 通过Hibernate提供的查询语言进行查询。Hibernate Query lanague

(3) EJBQL(JPQL 1.0) 是EJB提供的查询语言

(4)QBC(query by cretira)通过Cretira接口进行查询

(5)QBE(query by Example) 通过Example编程接口进行查询

从功能强弱上排序:NativeSQL > HQL > EJBQL(JPQL 1.0) >QBC(query by cretira) >QBE(query by Example)

 

QBE (Query By Example) 查询
   Criteria cri = session.createCriteria(Student.class); 
   cri.add(Example.create(s)); //s是一个 Student 对象 
   list cri.list();    
   实质:创建一个模版,比如我有一个表serial 有一个  giftortoy 字段,我设置 serial.setgifttoy("2"), 
         则这个表中的所有的giftortoy 为 2 的数据都会出来 

   QBE查询就是检索与指定样本对象具有相同属性值的对象。因此 QBE 查询的关键就是样本对象的创建,样本对象中的所有非空属性均将作为查询条件。 QBE 查询的功能子集,虽然 QBE 没有 QBC 功能大,但是有些场合 QBE 使用起来更为方便。 

         工具类Example 为 Criteria 对象指定样本对象作为查询条件 
Java代码   
1  Session session = HibernateSessionFactory.getSessionFactory().openSession();   
2  Transaction ts = session.beginTransaction();   
3  Customer c =  new  Customer();   
4  c.setCname("Hibernate");   
5  Criteria criteria = session.createCriteria(Customer. class );   
6  Criteria.add(Example.create(c));   
7  Iterator it = criteria.list().iterator();   
8  ts.commit();  
9  HibernateSessionFactory.closeSession();  

 

QBC查询方式 

QBC(Query By Criteria)查询方式是 Hibernate 提供的 “ 更加面向对象 ” 的一种检索方式。 QBC 在条件查询上比 HQL 查询更为灵活,而且支持运行时动态生成查询语句。 
在Hibernate 应用中使用 QBC 查询通常经过 3 个步骤 
  (1)使用 Session 实例的 createCriteria() 方法创建 Criteria 对象 
  (2)使用工具类 Restrictions 的相关方法为 Criteria 对象设置查询对象 
  (3)使用 Criteria 对象的 list() 方法执行查询,返回查询结果 


Restrictions类的常用方法 
Restrictions.eq(String propertyName,Object value) 
等于 
Restrictions.allEq(Map propertyNameValues) 
使用Map key/value 进行多个等于的比对 
Restrictions.gt(String propertyName, Object value) 
大于 >    (gt----->greater than) 
Restrictions.ge(String propertyName, Object value) 
大于等于 >=    (ge----->greater equal) 
Restrictions.It(String propertyName, Object value) 
小于< (It---->less than) 
Restrictions.Le(String propertyName, Object value) 
小于等于<= (le---->less equal) 
Restrictions.between(String propertyName, Object lo, Object hi) 
对应SQL 语句的 Between 子句 
Restrictions.like(String propertyName, Object value) 
对应SQL 语句的 LIKE 子句 
Restrictions.in(String propertyName, Collection value) 
对应SQL 语句的 in 子句 
Restrictions.and(Criterion lhs, Criterion rhs) 
And关系 
Restrictions.or(Criterion lhs, Criterion rhs) 
Or关系 
Restrictions.sqlRestriction(String sql,Object[] values,Type[] types) 
SQL限定查询 

           工具类Order 提供设置排序方式 
Order.asc(String propertyName) 
升序排序 
Order.desc(String propertyName) 
降序排序 

          工具类Projections 提供对查询结果进行统计与分组操作 
Porjections.avg(String propertyName) 
求某属性的平均值 
Projections.count(String propertyName) 
统计某属性的数量 
Projections.countDistinct(String propertyName) 
统计某属性的不同值的数量 
Projections.groupProperty(String propertyName) 
指定一组属性值 
Projections.max(String propertyName) 
某属性的最大值 
Projections.min(String propertyName) 
某属性的最小值 
Projections.projectionList() 
创建一个新的projectionList 对象 
Projections.rowCount() 
查询结果集中记录的条数 
Projections.sum(String propertyName) 
返回某属性值的合计 


QBC分页查询 
   Criteria为我们提供了两个有用的方法: setFirstResult(int firstResult) 和 setMaxResults(int maxResults). 
setFirstResult(int firstResult)方法用于指定从哪一个对象开始检索(序号从 0 开始),默认为第一个对象(序号为 0 ); setMaxResults(int maxResults) 方法用于指定一次最多检索出的对象数目,默认为所有对象。 
Java代码   
1  Session session = HibernateSessionFactory.getSessionFactory().openSession();   
2  Transaction ts =  null ;   
3  Criteria criteria = session.createCriteria(Order. class );   
4  int  pageSize = 15;   
5  int  pageNo = 1;   
6  criteria.setFirstResult((pageNo-1)*pageSize);   
7  criteria.setMaxResults(pageSize);   
8  Iterator it = criteria.list().iterator();   
9  ts.commit();   
10  HibernateSessionFactory.closeSession(); 

QBC复合查询 
   复合查询就是在原有的查询基础上再进行查询。例如在顾客对定单的一对多关系中,在查询出所有的顾客对象后,希望在查询定单中money 大于 1000 的定单对象 
DetachedCriteria  criteria= DetachedCriteria . forClass (Model. class ); 
criteria.add(Restrictions. eq ( "userid" , userid)); 
criteria.add(Restrictions. eq ( "state" , false )); 
criteria.add(Restrictions. not ( Expression . eq ( "freeze" , false )  )); 
criteria.addOrder( Order. desc ( "createtime" ) ); 
return   modelDAO .findByCriteria(criteria); 
Java代码 
1  Session session = HibernateSessionFactory.getSessionFactory().openSession();   
2  Transaction ts = session.beginTransaction();   
3  Criteria cuscriteria = session.createCriteria(Customer. class );   
4  Criteria ordCriteria = cusCriteria.createCriteria("orders");   
5  ordCriteria.add(Restrictions.gt("money",  new  Double(1000)));   
6  Iterator it = cusCriteria.list().iterator();   
7  ts.commit();   
8  HibernateSessionFactory.closeSession();  


QBC离线查询 
   离线查询又叫DetachedCriteria 查询,它可以在 Session 之外进行构造,只有在需要执行查询时才与 Session 绑定


任@先生
4楼 · 2021-04-18 13:50

Hibernate的查询方式hibernate的查询方式常见的主要分为三种: HQL, QBC(命名查询)

爱学习的小巴
5楼 · 2021-04-18 21:50

(1)NativeSQL 是运用数据库本身提供的数据查询语言进行查询,这种方式查询效率高,与数据库耦合性高依赖于具体的数据库。因为不同的数据库厂商提供的查询语言会存在某些细微差别。

(2)HQL 通过Hibernate提供的查询语言进行查询。Hibernate Query lanague

(3) EJBQL(JPQL 1.0) 是EJB提供的查询语言

(4)QBC(query by cretira)通过Cretira接口进行查询

(5)QBE(query by Example) 通过Example编程接口进行查询

722
6楼 · 2021-04-19 10:02

Hibernate有五种常见的查询方式:

(1)NativeSQL 是运用数据库本身提供的数据查询语言进行查询,这种方式查询效率高,与数据库耦合性高依赖于具体的数据库。因为不同的数据库厂商提供的查询语言会存在某些细微差别。

(2)HQL 通过Hibernate提供的查询语言进行查询。Hibernate Query lanague

(3) EJBQL(JPQL 1.0) 是EJB提供的查询语言

(4)QBC(query by cretira)通过Cretira接口进行查询

(5)QBE(query by Example) 通过Example编程接口进行查询

从功能强弱上排序:NativeSQL > HQL > EJBQL(JPQL 1.0) >QBC(query by cretira) >QBE(query by Example)


小小123
7楼 · 2021-04-19 10:15

Hibernate有五种常见的查询方式:

(1)NativeSQL 是运用数据库本身提供的数据查询语言进行查询,这种方式查询效率高,与数据库耦合性高依赖于具体的数据库。因为不同的数据库厂商提供的查询语言会存在某些细微差别。

(2)HQL 通过Hibernate提供的查询语言进行查询。Hibernate Query lanague

(3) EJBQL(JPQL 1.0) 是EJB提供的查询语言

(4)QBC(query by cretira)通过Cretira接口进行查询

(5)QBE(query by Example) 通过Example编程接口进行查询

从功能强弱上排序:NativeSQL > HQL > EJBQL(JPQL 1.0) >QBC(query by cretira) >QBE(query by Example)




猜不到结尾
8楼 · 2021-04-19 14:07

支持条件查询,连接查询,分页查询,分组查询,内置函数和自定义函数查询(SUN(),MIN(),MAX()),子查询

Greta
9楼 · 2021-06-25 16:28

Hibernate有五种常见的查询方式:

(1)NativeSQL 是运用数据库本身提供的数据查询语言进行查询,这种方式查询效率高,与数据库耦合性高依赖于具体的数据库。因为不同的数据库厂商提供的查询语言会存在某些细微差别。

(2)HQL 通过Hibernate提供的查询语言进行查询。Hibernate Query lanague

(3) EJBQL(JPQL 1.0) 是EJB提供的查询语言

(4)QBC(query by cretira)通过Cretira接口进行查询

(5)QBE(query by Example) 通过Example编程接口进行查询

从功能强弱上排序:NativeSQL > HQL > EJBQL(JPQL 1.0) >QBC(query by cretira) >QBE(query by Example)



相关问题推荐

  • 回答 2

    Statement的execute(String query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。如果结果不是ResultSet,比如insert或者update查询,它就会返回false。我们可以通过它的getResultSet方法来获取ResultSet,或者通过getUpda...

  • 回答 22

    忙的时候项目期肯定要加班 但是每天加班应该还不至于

  • 回答 108
    已采纳

    虽然Java人才越来越多,但是人才缺口也是很大的,我国对JAVA工程师的需求是所有软件工程师当中需求大的,达到全部需求量的60%-70%,所以Java市场在短时间内不可能饱和。其次,Java市场不断变化,人才需求也会不断增加。马云说过,未来的制造业要的不是石油,...

  • 回答 5
    已采纳

    工信部证书含金量较高。工信部是国务院的下属结构,具有发放资质、证书的资格。其所发放的证书具有较强的权威性,在全国范围内收到认可,含金量通常都比较高。 工信部证书,其含义也就是工信部颁发并承认的某项技能证书,是具有法律效力的,并且是国家认可的...

  • 回答 70
    已采纳

    学Java好不好找工作?看学完Java后能做些什么吧。一、大数据技术Hadoop以及其他大数据处理技术都是用Java或者其他,例如Apache的基于Java 的 HBase和Accumulo以及ElasticSearchas。但是Java在此领域并未占太大空间,但只要Hadoop和ElasticSearchas能够成长壮...

  • 回答 16
    已采纳

    就是java的基础知识啊,比如Java 集合框架;Java 多线程;线程的五种状态;Java 虚拟机;MySQL (InnoDB);Spring 相关;计算机网络;MQ 消息队列诸如此类

  • 回答 12

    #{}和${}这两个语法是为了动态传递参数而存在的,是Mybatis实现动态SQL的基础,总体上他们的作用是一致的(为了动态传参),但是在编译过程、是否自动加单引号、安全性、使用场景等方面有很多不同,下面详细比较两者间的区别:1.#{} 是 占位符 :动态解析 ...

  • 回答 62

    没问题的,专科学历也能学习Java开发的,主要看自己感不感兴趣,只要认真学,市面上的培训机构不少都是零基础课程,能跟得上,或是自己先找些资料学习一下。

  • 回答 4

    1、反射对单例模式的破坏采用反射的方式另辟蹊径实例了该类,导致程序中会存在不止一个实例。解决方案其思想就是采用一个全局变量,来标记是否已经实例化过了,如果已经实例化过了,第 二次实例化的时候,抛出异常2、clone()对单例模式的破坏当需要实现单例的...

  • 回答 5

     优点: 一、实例控制  单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 二、灵活性  因为类控制了实例化过程,所以类可以灵活更改实例化过程。 缺点: 一、开销  虽然数量很少,但如果每次对象请求引用时都要...

  • 回答 4

    这个主要是看你数组的长度是多少, 比如之前写过的一个程序有个数组存的是各个客户端的ip地址:string clientIp[4]={XXX, xxx, xxx, xxx};这个时候如果想把hash值对应到上面四个地址的话,就应该对4取余,这个时候p就应该为4...

  • 回答 6

     哈希表的大小 · 关键字的分布情况 · 记录的查找频率 1.直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)。...

  • 回答 6

    哈希表的大小取决于一组质数,原因是在hash函数中,你要用这些质数来做模运算(%)。而分析发现,如果不是用质数来做模运算的话,很多生活中的数据分布,会集中在某些点上。所以这里最后采用了质数做模的除数。 因为用质数做了模的除数,自然存储空间的大小也用质数了...

  • 回答 2

    是啊,哈希函数的设计至关重要,好的哈希函数会尽可能地保证计算简单和散列地址分布均匀,但是,我们需要清楚的是,数组是一块连续的固定长度的内存空间

  • 回答 3

     解码查表优化算法,seo优化

  • 回答 5

    1.对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值 称为哈希值。2.哈希值就是这个元素的位置。3.如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就...

没有解决我的问题,去提问