您的位置:首页 > 其它

Hibernate【HQL查询】

2016-01-18 01:39 267 查看
一,"from (类名称)"

    类名称:持久化类的配置文件(*.hbm.xml)中,<class name="..">中name的值

    使用:Query query=session.createQuery("from domain.Student");

    效果:把数据库中Student对应的表 中数据全部提取出来

   


二,"select (属性名称) from (类名称)"

    属性名称:持久化类的配置文件(*.hbm.xml)中,<property name="..">中name的值

    类名称:持久化类的配置文件(*.hbm.xml)中,<class name="..">中name的值

    使用:select name from domain.Student

    效果:获取表中的某一字段的所有值,注意获取的类型对应表中数据的类型,如果表中字段类型为varchar,那么获取到的类型就是String,如果表中字段为int,获取的类型就是Integer

  


  (2.1)  “select (属性名称,属性名称, ...) from (类名称)”  

 


  ps:可以看出,把每一条记录都封装成了一个Object[] 类型的对象

  那么获取当然需要这样了:

  


三,“select new (构造函数) from 类名称” (弥补了2.1中O bject[]类型操作的不便利性)

    构造函数:持久类中的构造函数

    类名称:持久化类的配置文件(*.hbm.xml)中,<class name="..">中name的值

    使用:

    (1)给持久类增加构造函数
      

public Student(){}
public Student(String name,String sex){
this.name=name;
this.sex=sex;
}


    (2)使用

  


  发现:相对于获得一个object[]数组,操作的不便利,这种封装成持久类对象更容易我们操作,还有就是如果不需要id数据,我们发现并没有查询id数据

四,“select 聚合函数(属性名称) from 类名称 ”

  


  对于这种聚合函数获得结果集而言,数据只有一条,显然放在List中有些大题小做了,

  uniqueResult()方法来代替list()方法,并且返回的结果不再是List类型而是Long类型

Query query=session.createQuery("select count(name) from domain.Student");
Long num=(Long)query.uniqueResult();
System.out.println(num);


二级缓存相关:

  回头看看session.createQuery(); 发现我们查询出来有的时候是Object[]类型,有的是Long类型,各种类型。二级缓存只能存储持久化对象,所以像我们这些方式查询出来的数据都不能放入二级缓存中

   Query query=session.createQuery("select id,name from domain.Student");

   Query query=session.createQuery("select new domain.Student(name) from domain.Student");//虽然集合中装的是持久化类型类型,但不是完整的持久化对象

   Query query=session.createQuery("select count(name) from domain.Student");

    以上查询出来的数据放进不了二级缓存中

   Query query=session.createQuery("from domain.Student");

    只有该方法把查询出来的数据放进了二级缓存

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: