Hibernate对多表关联

由于公司项目的需要,我对Hibernate对多表关联查询研究了一下,现总结如下,供朋友参考。
一、  Hibernate简介
Hibernate是一个JDO工具。它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系。这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含某个值对象的列表(List),而不必向传统的JDBC访问方式一样把结果集的数据逐个装载到一个值对象中,为编码工作节约了大量的时间。Hibernate提供的HQL是一种类SQL语言,它和EJBQL一样都是提供对象化的数据库查询方式,但HQL在功能和使用方式上都非常接近于标准的SQL。
 
二、  Hibernate与JDBC的区别
Hibernate与JDBC的主要区别如下:
1、      Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必 然的联系。 Hibernate 可以用在任何 JDBC 可以使用的场合,从某种意义上来说, Hibernate 在任何场合下取代 JDBC
2、      Hibernate 是一个和 JDBC 密切关联的框架,所以 Hibernate 的兼容性和 JDBC 驱动,和数据库都有一定的关系,但是和使用它的 Java 程序,和 App Server 没有任何关系,也不存在兼容性问题。
3、      Hibernate 是做为 JDBC 的替代者出现的,不能用来直接和 Entity Bean 做对比。
 
三、  Hibernate 进行多表关联查询
Hibernate 对多个表进行查询时,
 
 
 
查询结果是多个表的笛卡尔积,或者称为“交叉”连接。 例如:
from Student, Book
from Student as stu, Book as boo
from Student stu, Book boo
注意:让查询中的 Student Book 均是表 student book 对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。 别名应该服从首字母小写的规则是一个好习惯,这和 Java 对局部变量的命名规范是一致的。
建议通过MyEclipse进行生成这样就不会出太多的错注意表名要与类名同名
下面列举一个完整的例子来说明 Hibernate 对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表 tBookInfo BookSelection 的结构和其对应的 hbm.xml class 文件就不一一列举了,有需要详细了解的朋友,请联系我):
 
    
    String sTest  =   " from tBookInfo book, BookSelection sel where book.id = sel.bookId " ;
        Collection result 
=   new  ArrayList();
        Transaction tx 
=   null ;
        
try   {
            Session session 
= HibernateUtil.currentSession();
            tx 
= session.beginTransaction();
            Query query 
= session.createQuery(sql);
            result 
= query.list();
            tx.commit();
        }
  catch  (Exception e)  {
            
throw e;
       }
  finally   {
            HibernateUtil.closeSession();
        }

        ArrayList sList 
=  (ArrayList) result;
      Iterator iterator1 
=  sList.iterator();
        
while  (iterator1.hasNext())  {
             Object[] o 
= (Object[]) iterator1.next();
            tBookInfo bookInfo 
= (tBookInfo) o[0];
             BookSelection bookSelect 
= (BookSelection) o[1];
             System.out.println(
"BookInfo-Title: " + bookInfo.getTitle());
             System.out.println(
"BookSelection-BookSelectionId: " + bookSelect.getId());
        }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值