知识大全 Hibernate中HQL语句的使用

Posted 属性

篇首语:少年负壮志,奋烈自有时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate中HQL语句的使用相关的知识,希望对你有一定的参考价值。

Hibernate中HQL语句的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  本文主要使用一些测试方法来讲解HQL的具体应用

  采用一对多的关系映射举例 两个类Deptdid dname emps Empdept eid ename

  Dept hbm xml中

  []

  <hibernate mapping package= tarena demo po >

  <class name= Dept table= t_dept >

  <id name= did column= did >

  <generator class= identity ></generator>

  </id>

  <property name= dname ></property>

  <set name= emps cascade= all inverse= true >

  <key column= did ></key>

  <one to many class= Emp />

  </set>

  </class>

  </hibernate mapping>

  Emp hbm xml中

  []

  <hibernate mapping package= tarena demo po >

  <class name= Emp table= t_emp >

  <id name= eid column= eid >

  <generator class= identity ></generator>

  </id>

  <property name= ename ></property>

  <many to one name= dept column= did class= Dept ></many to one>

  <query name= findEmpByEid >

  <![CDATA[

  from Emp where eid<?

  ]]>

  </query>

  </class>

  </hibernate mapping>

  测试类

  [java]

  public class TestHQL

  /**

  * Hibernate生成关系模型

  */

  @Test

  public void test DDL()

  Configuration cfg = new Configuration(nfigure();

  SchemaExport export = new SchemaExport(cfg);

  export create(true true);

  

  @Test

  public void test InitData()

  // 个部门 个员工

  Session session = HibernateUtils getSession();

  for(int i= ;i<= ;i++)

  Dept dept = new Dept();

  dept setDname( 部门 +i);

  Set<Emp> emps = new HashSet<Emp>();

  for(int j= ;j<= ;j++)

  Emp emp = new Emp();

  emp setEname( 员工_ +i+ _ +j);

  emp setDept(dept);

  emps add(emp);

  

  dept setEmps(emps);

  session save(dept);

  session clear();

  

  session beginTransaction(mit();

  HibernateUtils close(session);

  

  /**

  * 查询属性

  * 查询一个属性 集合中的数据类型为String(对于dname属性)

  * 如果对于did属性 则是Integer类型

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = select dname from Dept ;

  Query query = session createQuery(hql);

  List<String> dnames = query list();

  for (String dname : dnames)

  System out println(dname);

  

  HibernateUtils close(session);

  

  /**

  * 查询多个属性 集合中数据的类型为Object[]

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = select did dname from Dept ;

  Query query = session createQuery(hql);

  List<Object[]> dnames = query list();

  for (Object[] o : dnames)

  System out println(o[ ]+ : +o[ ]);

  

  HibernateUtils close(session);

  

  /**

  * 查询多个属性 动态构建一个对象 Dept类必须要有new Dept(dname did)构造器

  * 和无参构造器

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = select new Dept(did dname) from Dept ;

  Query query = session createQuery(hql);

  List<Dept> depts = query list();

  for(Dept dept:depts)

  System out println(dept getDname());

  

  HibernateUtils close(session);

  

  /**

  * 简单对象查询

  * foreach迭代 如果迭代一个空值 如果从该对象获得方法 不会出现空指针异常

  * 内部采用的是iterator 当it hasNext()才进行 而如果是空值 it hasNext()为false

  * 不会执行该对象的方法 因此不会出现空指针异常

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = select d from Dept d ;

  Query query = session createQuery(hql);

  List<Dept> depts = query list();

  for(Dept dept:depts)

  System out println(dept getDname()+ +dept getDid());

  

  HibernateUtils close(session);

  

  /**

  * 对象查询 条件查询

  * 参数的顺序从 开始

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = select d from Dept d where dname=? ;

  Query query = session createQuery(hql);

  query setString( 部门 );

  List<Dept> depts = query list();

  for (Dept dept : depts)

  System out println(dept getDname());

  

  HibernateUtils close(session);

  

  /**

  * 对象查询 条件查询

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = select d from Dept d where dname=? and did=? ;

  List<Dept> depts = session createQuery(hql)

  setString( 部门 ) setInteger( ) list();

  for (Dept dept : depts)

  System out println(dept getDname());

  

  HibernateUtils close(session);

  

  /**

  * 查询所有员工信息

  * 分页查询

  * setFirstResult();确定查询的起点

  * setMaxResult();确定查询的条数

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = from Emp ;

  int currentPage = ;

  int pageSize = ;

  List<Emp> emps = session createQuery(hql)

  setFirstResult((currentPage )*pageSize)

  setMaxResults(pageSize) list();

  for (Emp emp : emps)

  System out println(emp getEname());

  

  HibernateUtils close(session);

  

  /**

  * 查询所有员工信息

  * 查询最大页数

  * 首先查询所有记录数

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String hql = select count(*) from Emp ;

  List<Long> list = session createQuery(hql) list();

  int rec = list get( ) intValue();

  int pageSize = ;

  System out println( 最大页数为: );

  System out println(rec%pageSize == ?rec/pageSize:rec/pageSize+ );

  HibernateUtils close(session);

  

  /**

  * 使用命名查询

  * 将hql语句写在映射文件中

  * 查询ID号小于 的员工信息

  * from Emp where eid<

  *  <query name= findEmpByEid >

  <![CDATA[

  from Emp where eid<?

  ]]>

  </query>

  getNamedQuery() 获取Query对象

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  Query query = session getNamedQuery( findEmpByEid );

  query setInteger( );

  List<Emp> emps = query list();

  for (Emp emp : emps)

  System out println(emp getEid()+ : +emp getEname());

  

  HibernateUtils close(session);

  

  /**

  * 在hibernate 中使用sql查询

  * select * from t_emp;

  */

  @Test

  public void test ()

  Session session = HibernateUtils getSession();

  String sql = select * from t_emp ;

  SQLQuery query = session createSQLQuery(sql);

  List<Object[]> list = query list();

  for (Object[] o : list)  

  System out println(o[ ]+ : +o[ ]+ : +o[ ]);

  

  HibernateUtils close(session);

  

cha138/Article/program/Java/ky/201311/28256

相关参考

知识大全 hibernate-HQL语句(1)

hibernate-HQL语句(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  查询整个映射

知识大全 Hibernate HQL语句的参数设置

HibernateHQL语句的参数设置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以hql举

知识大全 Hibernate:HQL/QBC查询语言比较的用法

Hibernate:HQL/QBC查询语言比较的用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Hibernate的HQL多表联合查询使用left join方式

Hibernate的HQL多表联合查询使用leftjoin方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 hibernate.的QBC语句

hibernate.的QBC语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Criteria

知识大全 hibernate一对多关联关系

  想了几天终于知道sql语句的发出问题查了很多书感觉都没有说清楚有的还是错的请看下面  [java]  <?xmlversion=?>  <!DOCTYPEhibernatemap

知识大全 hibernate事务,一级缓存,二级缓存

  通过以上的介绍可以看出hibernate主要从以下几个方面来优化查询性能  降低访问数据库的频率减少select语句的数目实现手段有使用迫切左外连接或迫切内连接对延迟检索或立即检索设置批量检索数目

知识大全 有关ssh框架的面试题 — ibatis与hibernate有什么区别

iBatis的sql语句需要自己手动写而Hibernate能够在程序运行时自动生成但是不要就这样以为Hibernate比iBatis方便其实二者熟悉之后的效率差不多而Hibernate还能够自动建表等

知识大全 利用JAVACC将HQL-SQL

利用JAVACC将HQL-SQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先下载JAVA

知识大全 在java中,如果不是在循环语句中怎么用break跳到指定语句

在java中,如果不是在循环语句中怎么用break跳到指定语句?break除了可循环语句,和switch-case语句中,还可指明它要跳出的代码快,并从紧跟该快的下一句执行,如:breakBolckL